diff --git a/playground/bind-with-datasource/index.html b/playground/bind-with-datasource/index.html index 6e84afac6b312e77bcfb6bad34376bbada65cf4f..2c1e933672ebd1e74f2530ba13915c42bffcdd02 100644 --- a/playground/bind-with-datasource/index.html +++ b/playground/bind-with-datasource/index.html @@ -16,7 +16,14 @@ Datasource mit fest definieren Daten --> - <h1>Data Table with datasource</h1> + <h1>Data Table with datasource This is an</h1> + <div> + + <span class="monster-icon-primary-5-on"></span> + <span class="monster-icon-primary-5-off"></span> + </div> + + <ul> <li><a href="../">Back to overview</a></li> </ul> @@ -38,6 +45,7 @@ --> <monster-datatable id="test-datatable" data-monster-datasource-selector="#data1"> + <monster-pagination></monster-pagination> <monster-datasource-save-button slot="bar" data-monster-option-datasource-selector="#data1"> </monster-datasource-save-button> <monster-datasource-status slot="bar" data-monster-option-datasource-selector="#data1"> diff --git a/playground/bind-with-datasource/main.mjs b/playground/bind-with-datasource/main.mjs index cf415b64fbe90927093149c74ed10c986edae466..f802672370fc8861406e4d2dd02d0aed92692eed 100644 --- a/playground/bind-with-datasource/main.mjs +++ b/playground/bind-with-datasource/main.mjs @@ -18,6 +18,7 @@ import "../../source/components/style/table.pcss"; import "../../source/components/style/badge.pcss"; import "../../source/components/style/button.pcss"; import "../../source/components/style/link.pcss"; +import "../../source/components/style/icons.pcss"; import "../../source/components/style/data-grid.pcss"; import "../../source/components/style/property.pcss"; import "../../source/components/style/typography.pcss"; diff --git a/playground/bind-with-datasource/main.pcss b/playground/bind-with-datasource/main.pcss index 82df8dc929c67a133af862ee8685d2ca77957009..5b49110e71eb0f2ea5cdc2981d74ea364db7a32d 100644 --- a/playground/bind-with-datasource/main.pcss +++ b/playground/bind-with-datasource/main.pcss @@ -7,8 +7,6 @@ align-items: center; justify-content: center; min-height: calc( 100vh - 100px ); - background-color: var(--monster-bg-color-primary-1); - color: var(--monster-color-primary-1); } .inner-form { diff --git a/playground/issues/143.html b/playground/issues/143.html index bd931f738d6caac9ab6447000674a293a41e07d2..e85db9face9e1fc3319f6b61f468b78112fb6679 100644 --- a/playground/issues/143.html +++ b/playground/issues/143.html @@ -36,17 +36,15 @@ </ul> - <div style="width: 950px;margin: 0 auto;"> - + <div style="margin: 10px;"> <monster-datasource-rest id="data1" data-monster-option-write-url="/demo/bind-with-datasource/data.json" data-monster-option-read-url="/demo/bind-with-datasource/data.json"></monster-datasource-rest> - - <monster-datatable id="test-datatable" data-monster-datasource-selector="#data1"> - - <monster-collapse id="my-collapse" data-monster-role="filter-collapse"> <div class="flex"> - <monster-tabs style="width: 100%" data-monster-option-classes-button="monster-theme-primary-2" id="filtertabs"> + <monster-tabs style="width: 100%" + data-monster-option-features-opendelay="500" + data-monster-option-classes-navigation="monster-theme-background-inherit" + data-monster-option-classes-button="monster-theme-background-inherit" id="filtertabs"> <div data-monster-button-label="Filter" data-monster-state="active" class="active"> <monster-datatable-filter id="listfilter1" slot="filter" data-monster-option-storedconfig-selector="#filtertabs"> <label data-monster-label="OID1" id="oid1" @@ -68,7 +66,7 @@ 2 <monster-filter-input name="value3" type="search"></monster-filter-input> </label> - <label data-monster-label="OID4" data-monster-template="${value | call:range:oid}" id="cc">OID + <label data-monster-label="customerUID" data-monster-template="${value | call:range:customerUID}" id="customerUID">customerUID 3<input name="value4" type="search"></label> <label data-monster-label="OID5" data-monster-template="${value | call:range:oid}" id="gd">OID 4<input name="value5" type="search"></label> @@ -114,18 +112,12 @@ <li>asdfjasdkfjk</li> </ul> </div> - <div data-monster-mode="fixed" data-monster-head="i18n:key1" data-monster-grid-template="1fr"><input + <div data-monster-mode="fixed" data-monster-align="end" data-monster-head="i18n:key1" data-monster-grid-template="1fr"><input type="checkbox"></div> <div data-monster-head="i18n:key2" data-monster-replace="path:t12-row.erpCreation | date"></div> - <div data-monster-mode="fixed" data-monster-head="i18n:key2" - data-monster-replace="path:t12-row.erpCreation | time"></div> - <div data-monster-mode="fixed" data-monster-head="i18n:key2" - data-monster-replace="path:t12-row.erpCreation | time"></div> - <div data-monster-mode="fixed" data-monster-head="i18n:key2" - data-monster-replace="path:t12-row.erpCreation | time"></div> - <div data-monster-mode="fixed" data-monster-head="i18n:key2" - data-monster-replace="path:t12-row.erpCreation | time"></div> + <div data-monster-mode="fixed" data-monster-head="customerUID" + data-monster-replace="path:t12-row.customerUID"></div> <div data-monster-mode="fixed" data-monster-replace="path:t12-row.erpCreation | time"></div> <div data-monster-head="orderState 2" class="center" data-monster-align="center" diff --git a/playground/select/index.html b/playground/select/index.html index 39d203a2dfc21cd32406317bd334b6c61f8bf9c6..de2ad821903076a40b5270f59e8a36597cabe368 100644 --- a/playground/select/index.html +++ b/playground/select/index.html @@ -10,7 +10,7 @@ <body> -<main> +<main style="width: 300px;display: flex;flex-direction: column;align-items: center;justify-content: center;"> <h1>Select</h1> @@ -21,5 +21,8 @@ </main> + +<ul id="log"></ul> + </body> </html> \ No newline at end of file diff --git a/playground/select/main.js b/playground/select/main.js index 739e738f12f412c9ed880a3ec61884978a24ce79..58a4f94db1f338c2e32e42b81f98987fdc3dd324 100644 --- a/playground/select/main.js +++ b/playground/select/main.js @@ -14,11 +14,12 @@ import "./main.pcss"; const url = "/select/data.json"; const select = document.querySelector("monster-select"); +const log=document.querySelector("#log"); const option = { "url": url, "features": { - "closeOnSelect": true, + "closeOnSelect": false, }, "fetch": { "headers": { @@ -38,20 +39,29 @@ const option = { select.setOptions(option); +function addLogEntry(text) { + const logEntry = document.createElement("li"); + logEntry.textContent = text; + log.appendChild(logEntry); +} + + +addLogEntry("fetch1"); select.fetch(url).then((data) => { - console.log(data); + addLogEntry("fetch1 done"); }).catch((error) => { - console.error(error); + addLogEntry(error); }); const url2 = "/select/data2.json"; +addLogEntry("fetch2 url2: "+url2 +" in 2s"); setTimeout(() => { - console.log("fetch2"); + addLogEntry("fetch2"); select.fetch(url2).then((data) => { - console.log(data); + addLogEntry("fetch2 done"); }).catch((error) => { - console.error(error); + addLogEntry(error); }) },2000); \ No newline at end of file diff --git a/source/components/datatable/datatable.mjs b/source/components/datatable/datatable.mjs index e526adb49dfe9a492e2414337a3b1e0bc23e463d..da395a85672709dea7f1f612bdc4eb500dbce0ba 100644 --- a/source/components/datatable/datatable.mjs +++ b/source/components/datatable/datatable.mjs @@ -113,7 +113,7 @@ const columnBarElementSymbol = Symbol("columnBarElement"); * skinparam monochrome true * skinparam shadowing false * HTMLElement <|-- CustomElement - * CustomElement <|-- Datatable + * CustomElement <|-- DataTable * @enduml * * @copyright schukai GmbH @@ -150,6 +150,8 @@ class DataTable extends CustomElement { * @property {number} responsive.breakpoint Breakpoint for responsive mode * @property {Object} labels Labels * @property {string} labels.theListContainsNoEntries Label for empty state + * @property {Object} classes Classes + * @property {string} classes.container Container class * @property {Object} features Features * @property {boolean} features.settings Settings feature * @property {boolean} features.footer Footer feature @@ -187,6 +189,12 @@ class DataTable extends CustomElement { theListContainsNoEntries: "The list contains no entries", }, + classes : { + control: "monster-theme-table-container-1", + container: "monster-theme-table-container-1", + row: "monster-theme-table-row-1", + }, + features: { settings: true, footer: true, @@ -933,6 +941,11 @@ function initOptionsFromArguments() { function getEmptyTemplate() { return `<monster-state data-monster-role="empty-without-action"> <div part="visual"> + <style> + path { + fill: var(--monster-bg-color-primary-4); + } + </style> <svg width="4rem" height="4rem" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="m21.5 22h-19c-1.378 0-2.5-1.121-2.5-2.5v-7c0-.07.015-.141.044-.205l3.969-8.82c.404-.896 1.299-1.475 2.28-1.475h11.414c.981 0 1.876.579 2.28 1.475l3.969 8.82c.029.064.044.135.044.205v7c0 1.379-1.122 2.5-2.5 2.5zm-20.5-9.393v6.893c0 .827.673 1.5 1.5 1.5h19c.827 0 1.5-.673 1.5-1.5v-6.893l-3.925-8.723c-.242-.536-.779-.884-1.368-.884h-11.414c-.589 0-1.126.348-1.368.885z"/> <path d="m16.807 17h-9.614c-.622 0-1.186-.391-1.404-.973l-1.014-2.703c-.072-.194-.26-.324-.468-.324h-3.557c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h3.557c.622 0 1.186.391 1.405.973l1.013 2.703c.073.194.261.324.468.324h9.613c.208 0 .396-.13.468-.324l1.013-2.703c.22-.582.784-.973 1.406-.973h3.807c.276 0 .5.224.5.5s-.224.5-.5.5h-3.807c-.208 0-.396.13-.468.324l-1.013 2.703c-.219.582-.784.973-1.405.973z"/> @@ -951,14 +964,15 @@ function getEmptyTemplate() { function getTemplate() { // language=HTML return ` - <div data-monster-role="control" part="control"> + <div data-monster-role="control" part="control" data-monster-attributes="class path:classes.control"> <template id="headers-row"> - <div data-monster-attributes="class path:headers-row.classname, + <div data-monster-attributes="class path:headers-row.classes, data-monster-index path:headers-row.index" data-monster-replace="path:headers-row.html"></div> </template> <slot></slot> - <div class="table-container" part="table-container"> + <div data-monster-attributes="class path:classes.container" + data-monster-role="table-container" part="table-container"> <div class="filter"> <slot name="filter"></slot> </div> diff --git a/source/components/datatable/pagination.mjs b/source/components/datatable/pagination.mjs index 0df196a1ad9193cdc0bfed19a40f01641a3e7622..e149b32b0732bb3eacbe5c1811b3e4e940d05a77 100644 --- a/source/components/datatable/pagination.mjs +++ b/source/components/datatable/pagination.mjs @@ -48,8 +48,6 @@ const datasourceLinkedElementSymbol = Symbol("datasourceLinkedElement"); * * <img src="./images/pagination.png"> * - * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library - * * You can create this control either by specifying the HTML tag <monster-pagination />` directly in the HTML or using * Javascript via the `document.createElement('monster-pagination');` method. * diff --git a/source/components/datatable/status.mjs b/source/components/datatable/status.mjs index dbe12f503602eeb6553fc1858c5f6ab88703762f..12c99fb6ea227e72362d06cbd097ff5a8db68ada 100644 --- a/source/components/datatable/status.mjs +++ b/source/components/datatable/status.mjs @@ -220,8 +220,8 @@ function getTemplate() { <div data-monster-role="control" part="control" data-monster-attributes="disabled path:disabled | if:true"> <monster-context-error - data-monster-option-classes-button="monster-theme-error-2 monster-bg-color-primary-2"></monster-context-error> - <div class="monster-spinner monster-theme-primary-4" + data-monster-option-classes-button="monster-theme-error-2 monster-theme-background-inherit"></monster-context-error> + <div class="monster-theme-table-elements" data-monster-attributes="data-monster-state-loader path:state.spinner"></div> </div> `; diff --git a/source/components/datatable/style/column-bar.pcss b/source/components/datatable/style/column-bar.pcss index 1ccded679baa85bb18534bcc1e857e1ba277ffb6..bf5650af2df29794108a501f5ca186217f822557 100644 --- a/source/components/datatable/style/column-bar.pcss +++ b/source/components/datatable/style/column-bar.pcss @@ -20,7 +20,6 @@ justify-content: flex-start; padding: 0; margin: 0 15px 0 0; - //margin-left: 10px; & li { list-style: none; @@ -30,16 +29,19 @@ background-clip: border-box; & .is-visible { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-4); background-repeat: no-repeat no-repeat; background-position: center center; background-size: cover; + width: 8px; height: 8px; } & .is-hidden { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-4); background-repeat: no-repeat no-repeat; background-position: center center; background-size: cover; diff --git a/source/components/datatable/style/dataset.pcss b/source/components/datatable/style/dataset.pcss index 74e35e01aec76c519bb84c452504df1944c9d1a7..0afb16d472c5b5f128c802d1267d6b9e13cfcedc 100644 --- a/source/components/datatable/style/dataset.pcss +++ b/source/components/datatable/style/dataset.pcss @@ -8,6 +8,7 @@ @import "../../style/property.pcss"; @import "../../style/ripple.pcss"; @import "../../style/badge.pcss"; +@import "../../style/icons.pcss"; @import "../../style/link.pcss"; diff --git a/source/components/datatable/style/datatable.pcss b/source/components/datatable/style/datatable.pcss index 93158acde09e9dd47cc36fd0c954d247bfb9ff29..6dd48e8f747aa7b83206151abe1979170f6d684c 100644 --- a/source/components/datatable/style/datatable.pcss +++ b/source/components/datatable/style/datatable.pcss @@ -7,6 +7,7 @@ @import "../../style/badge.pcss"; @import "../../style/link.pcss"; @import "../../style/space.pcss"; +@import "../../style/icons.pcss"; @import "../../style/mixin/form.pcss"; @import "../../style/mixin/button.pcss"; @@ -15,7 +16,6 @@ @import "../../style/mixin/media.pcss"; @import "../../style/theme.pcss"; - [data-monster-role="control"] { display: flex; outline: none; @@ -23,12 +23,10 @@ flex-direction: column; } -.table-container { +[data-monster-role="table-container"] { display: block; width: 100%; overflow-x: auto; - background-color: var(--monster-bg-color-primary-2); - color: var(--monster-color-primary-2); padding: 20px; box-sizing: border-box; min-width: fit-content; @@ -62,8 +60,6 @@ [data-monster-role=datatable] { display: grid; @mixin paragraph; - background-color: var(--monster-bg-color-primary-1); - color: var(--monster-color-primary-1); box-sizing: border-box; & > div { @@ -73,7 +69,7 @@ align-items: center; justify-content: flex-start; line-height: 1.2; - border-bottom: 1px dashed var(--monster-bg-color-primary-2); + border-bottom: 1px dashed var(--monster-table-border-color); box-sizing: border-box; min-width: 0; @@ -98,20 +94,17 @@ & input[type=checkbox] { accent-color: var(--monster-bg-color-primary-1); } - } @for $i from 0 to 500 { - &:has([data-monster-insert-reference=row-$(i)]:hover) [data-monster-insert-reference=row-$(i) - + &:has([data-monster-insert-reference$=row-$(i)]:hover) [data-monster-insert-reference$=row-$(i) ] { - color: var(--monster-color-selection-2); - background-color: var(--monster-bg-color-selection-2); + color: var(--monster-table-hover-color); + background-color: var(--monster-table-hover-bg-color); box-sizing: border-box; } } - & .monster-form { @mixin form; } @@ -194,20 +187,17 @@ monster-state[data-monster-role=empty-without-action]::part(action) { } .empty-state-container { - color: var(--monster-color-primary-1); - background-color: var(--monster-bg-color-primary-1); padding: var(--monster-space-7) 0; } @mixin viewport-7 { - .table-container { + [data-monster-role="table-container"] { & .bar { display: flex; align-items: flex-end; - display: flex; flex-direction: column-reverse; gap: 0.1rem; } @@ -216,7 +206,7 @@ monster-state[data-monster-role=empty-without-action]::part(action) { &:has([data-monster-insert-reference=row-$(i)]:hover) [data-monster-insert-reference=row-$(i) ] { - backgroud-color: red; + /*background-color: var(--monster-bg-color-selection-2);*/ box-sizing: border-box; } } diff --git a/source/components/datatable/style/embedded-pagination.pcss b/source/components/datatable/style/embedded-pagination.pcss index 2b2188b7d1db45628a3adba7231b42d0b7b2ee92..a111bec1ca9f6870e252d9ee7d02af2092db5e0d 100644 --- a/source/components/datatable/style/embedded-pagination.pcss +++ b/source/components/datatable/style/embedded-pagination.pcss @@ -33,8 +33,8 @@ & a, & a:link, & a:visited, & a:hover, & a:active, & a:focus { width: max-content; - color: var(--monster-color-primary-2); - background-color: var(--monster-bg-color-primary-2); + color: var(--monster-table-color); + background-color: var(--monster-table-bg-color); text-decoration: none; outline: none; padding: 0 0.4rem; diff --git a/source/components/datatable/style/filter.pcss b/source/components/datatable/style/filter.pcss index 6478fff327fc7d70e4ef846fb271ab5dcbf75b43..545e2a446d5e7d2b45877332491caa752f33dbe8 100644 --- a/source/components/datatable/style/filter.pcss +++ b/source/components/datatable/style/filter.pcss @@ -52,7 +52,7 @@ flex-direction: column; - border-bottom: var(--monster-border-width) solid var(--monster-border-color); + border-bottom: var(--monster-border-width) solid var(--monster-table-border-color); padding: 2px; align-items: stretch; diff --git a/source/components/datatable/style/pagination.pcss b/source/components/datatable/style/pagination.pcss index d88a76b63c2700227af89c0aca4581905be09b7e..eb21a458796b94580095a8ec4a04d263346c1f5a 100644 --- a/source/components/datatable/style/pagination.pcss +++ b/source/components/datatable/style/pagination.pcss @@ -33,9 +33,9 @@ & ul li a { @mixin button; - background-color: var(--monster-bg-color-primary-1); - color: var(--monster-color-primary-1); - border-color: var(--monster-bg-color-primary-4); + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); + border-color: var(--monster-table-bg-color); width: max-content; &.current { diff --git a/source/components/datatable/stylesheet/change-button.mjs b/source/components/datatable/stylesheet/change-button.mjs index c680e493637eb3acf60065b802c7461601321737..a7aef8de0f0195f25c63c0d609467c8fdc3bda58 100644 --- a/source/components/datatable/stylesheet/change-button.mjs +++ b/source/components/datatable/stylesheet/change-button.mjs @@ -20,7 +20,7 @@ const ChangeButtonStyleSheet = new CSSStyleSheet(); try { ChangeButtonStyleSheet.insertRule(` @layer changebutton { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/column-bar.mjs b/source/components/datatable/stylesheet/column-bar.mjs index a59d996c3d3e3bd8ebbf9e453e415d85b3fea49a..8e254b02b438d8c28050ff2ba7aeada644d2437c 100644 --- a/source/components/datatable/stylesheet/column-bar.mjs +++ b/source/components/datatable/stylesheet/column-bar.mjs @@ -20,7 +20,7 @@ const ColumnBarStyleSheet = new CSSStyleSheet(); try { ColumnBarStyleSheet.insertRule(` @layer columnbar { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] [data-monster-role=dots]{display:flex;flex-direction:row;justify-content:flex-start;margin:0 15px 0 0;padding:0;//margin-left:10px}[data-monster-role=control] [data-monster-role=dots] li{background-clip:border-box;display:flex;list-style:none;margin:0 5px 0 0;padding:0}[data-monster-role=control] [data-monster-role=dots] li .is-visible{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3C/svg%3E\");background-position:50%;background-repeat:no-repeat;background-size:cover;height:8px;width:8px}[data-monster-role=control] [data-monster-role=dots] li .is-hidden{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\");background-position:50%;background-repeat:no-repeat;background-size:cover;height:8px;width:8px}[data-monster-role=control] [data-monster-role=dots] li :focus,[data-monster-role=control] [data-monster-role=dots] li :hover{background-clip:border-box}[data-monster-role=control] [data-monster-role=settings-layer]{background-color:var(--monster-bg-color-primary-4);border-radius:4px;color:var(--monster-color-primary-4);display:none;padding:1rem;z-index:var(--monster-z-index-popover)}[data-monster-role=control] .visible[data-monster-role=settings-layer]{display:block}[data-monster-role=control] [data-monster-role=settings-layer] label{align-items:center;cursor:pointer;display:flex;justify-content:flex-start;margin:0;padding:0}[data-monster-role=control] [data-monster-role=settings-layer] label input{accent-color:var(--monster-bg-color-primary-4);margin:0 .5rem 0 0}[data-monster-role=control] [data-monster-role=settings-layer] [data-monster-role=settings-popup-list]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);grid-gap:.1rem 1rem}[data-monster-role=control] a[data-monster-role=settings-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=settings-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M0 1.5A1.5 1.5 0 0 1 1.5 0h13A1.5 1.5 0 0 1 16 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 14.5zM1.5 1a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5H5V1zM10 15V1H6v14zm1 0h3.5a.5.5 0 0 0 .5-.5v-13a.5.5 0 0 0-.5-.5H11z'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}[data-monster-role=control]:hover{color:var(--monster-color-primary-1)}.hidden[data-monster-role=control]{display:none} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] [data-monster-role=dots]{display:flex;flex-direction:row;justify-content:flex-start;margin:0 15px 0 0;padding:0}[data-monster-role=control] [data-monster-role=dots] li{background-clip:border-box;display:flex;list-style:none;margin:0 5px 0 0;padding:0}[data-monster-role=control] [data-monster-role=dots] li .is-visible{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3C/svg%3E\")}[data-monster-role=control] [data-monster-role=dots] li .is-hidden,[data-monster-role=control] [data-monster-role=dots] li .is-visible{background-color:var(--monster-bg-color-primary-4);background-position:50%;background-repeat:no-repeat;background-size:cover;height:8px;width:8px}[data-monster-role=control] [data-monster-role=dots] li .is-hidden{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\")}[data-monster-role=control] [data-monster-role=dots] li :focus,[data-monster-role=control] [data-monster-role=dots] li :hover{background-clip:border-box}[data-monster-role=control] [data-monster-role=settings-layer]{background-color:var(--monster-bg-color-primary-4);border-radius:4px;color:var(--monster-color-primary-4);display:none;padding:1rem;z-index:var(--monster-z-index-popover)}[data-monster-role=control] .visible[data-monster-role=settings-layer]{display:block}[data-monster-role=control] [data-monster-role=settings-layer] label{align-items:center;cursor:pointer;display:flex;justify-content:flex-start;margin:0;padding:0}[data-monster-role=control] [data-monster-role=settings-layer] label input{accent-color:var(--monster-bg-color-primary-4);margin:0 .5rem 0 0}[data-monster-role=control] [data-monster-role=settings-layer] [data-monster-role=settings-popup-list]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);grid-gap:.1rem 1rem}[data-monster-role=control] a[data-monster-role=settings-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=settings-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M0 1.5A1.5 1.5 0 0 1 1.5 0h13A1.5 1.5 0 0 1 16 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 14.5zM1.5 1a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 .5.5H5V1zM10 15V1H6v14zm1 0h3.5a.5.5 0 0 0 .5-.5v-13a.5.5 0 0 0-.5-.5H11z'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}[data-monster-role=control]:hover{color:var(--monster-color-primary-1)}.hidden[data-monster-role=control]{display:none} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/dataset.mjs b/source/components/datatable/stylesheet/dataset.mjs index c3305c8e9aa94a9fb133d474fb7274170ca29cd4..067dd289c116dfbcb42051866a6c6fd35dac5e62 100644 --- a/source/components/datatable/stylesheet/dataset.mjs +++ b/source/components/datatable/stylesheet/dataset.mjs @@ -20,7 +20,7 @@ const DatasetStyleSheet = new CSSStyleSheet(); try { DatasetStyleSheet.insertRule(` @layer dataset { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}.monster-icon-primary-1-info:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-info:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-info:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-info:before,.monster-icon-secondary-1-info:before,.monster-icon-tertiary-1-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-info:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-info:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-info:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-info:before,.monster-icon-secondary-2-info:before,.monster-icon-tertiary-2-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-info:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-info:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-info:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-info:before,.monster-icon-secondary-3-info:before,.monster-icon-tertiary-3-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-info:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-info:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-info:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-info:before,.monster-icon-secondary-4-info:before,.monster-icon-tertiary-4-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-on:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-on:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-on:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-on:before,.monster-icon-secondary-1-on:before,.monster-icon-tertiary-1-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-on:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-on:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-on:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-on:before,.monster-icon-secondary-2-on:before,.monster-icon-tertiary-2-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-on:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-on:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-on:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-on:before,.monster-icon-secondary-3-on:before,.monster-icon-tertiary-3-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-on:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-on:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-on:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-on:before,.monster-icon-secondary-4-on:before,.monster-icon-tertiary-4-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-off:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-off:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-off:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-off:before,.monster-icon-secondary-1-off:before,.monster-icon-tertiary-1-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-off:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-off:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-off:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-off:before,.monster-icon-secondary-2-off:before,.monster-icon-tertiary-2-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-off:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-off:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-off:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-off:before,.monster-icon-secondary-3-off:before,.monster-icon-tertiary-3-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-off:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-off:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-off:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-off:before,.monster-icon-secondary-4-off:before,.monster-icon-tertiary-4-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-positiv:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-positiv:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-positiv:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-positiv:before,.monster-icon-secondary-1-positiv:before,.monster-icon-tertiary-1-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-positiv:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-positiv:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-positiv:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-positiv:before,.monster-icon-secondary-2-positiv:before,.monster-icon-tertiary-2-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-positiv:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-positiv:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-positiv:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-positiv:before,.monster-icon-secondary-3-positiv:before,.monster-icon-tertiary-3-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-positiv:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-positiv:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-positiv:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-positiv:before,.monster-icon-secondary-4-positiv:before,.monster-icon-tertiary-4-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-negativ:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-negativ:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-negativ:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-negativ:before,.monster-icon-secondary-1-negativ:before,.monster-icon-tertiary-1-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-negativ:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-negativ:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-negativ:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-negativ:before,.monster-icon-secondary-2-negativ:before,.monster-icon-tertiary-2-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-negativ:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-negativ:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-negativ:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-negativ:before,.monster-icon-secondary-3-negativ:before,.monster-icon-tertiary-3-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-negativ:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-negativ:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-negativ:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-negativ:before,.monster-icon-secondary-4-negativ:before,.monster-icon-tertiary-4-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-warning:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-warning:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-warning:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-warning:before,.monster-icon-secondary-1-warning:before,.monster-icon-tertiary-1-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-warning:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-warning:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-warning:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-warning:before,.monster-icon-secondary-2-warning:before,.monster-icon-tertiary-2-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-warning:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-warning:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-warning:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-warning:before,.monster-icon-secondary-3-warning:before,.monster-icon-tertiary-3-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-warning:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-warning:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-warning:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-warning:before,.monster-icon-secondary-4-warning:before,.monster-icon-tertiary-4-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-neutral:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-neutral:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-neutral:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-neutral:before,.monster-icon-secondary-1-neutral:before,.monster-icon-tertiary-1-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-neutral:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-neutral:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-neutral:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-neutral:before,.monster-icon-secondary-2-neutral:before,.monster-icon-tertiary-2-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-neutral:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-neutral:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-neutral:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-neutral:before,.monster-icon-secondary-3-neutral:before,.monster-icon-tertiary-3-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-neutral:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-neutral:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-neutral:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-neutral:before,.monster-icon-secondary-4-neutral:before,.monster-icon-tertiary-4-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-question:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-question:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-question:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-question:before,.monster-icon-secondary-1-question:before,.monster-icon-tertiary-1-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-question:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-question:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-question:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-question:before,.monster-icon-secondary-2-question:before,.monster-icon-tertiary-2-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-question:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-question:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-question:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-question:before,.monster-icon-secondary-3-question:before,.monster-icon-tertiary-3-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-question:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-question:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-question:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-question:before,.monster-icon-secondary-4-question:before,.monster-icon-tertiary-4-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-plus:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-plus:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-plus:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-plus:before,.monster-icon-secondary-1-plus:before,.monster-icon-tertiary-1-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-plus:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-plus:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-plus:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-plus:before,.monster-icon-secondary-2-plus:before,.monster-icon-tertiary-2-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-plus:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-plus:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-plus:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-plus:before,.monster-icon-secondary-3-plus:before,.monster-icon-tertiary-3-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-plus:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-plus:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-plus:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-plus:before,.monster-icon-secondary-4-plus:before,.monster-icon-tertiary-4-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-dash:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-dash:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-dash:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-dash:before,.monster-icon-secondary-1-dash:before,.monster-icon-tertiary-1-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-dash:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-dash:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-dash:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-dash:before,.monster-icon-secondary-2-dash:before,.monster-icon-tertiary-2-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-dash:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-dash:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-dash:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-dash:before,.monster-icon-secondary-3-dash:before,.monster-icon-tertiary-3-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-dash:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-dash:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-dash:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-dash:before,.monster-icon-secondary-4-dash:before,.monster-icon-tertiary-4-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-gear:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-gear:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-gear:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-gear:before,.monster-icon-secondary-1-gear:before,.monster-icon-tertiary-1-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-gear:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-gear:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-gear:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-gear:before,.monster-icon-secondary-2-gear:before,.monster-icon-tertiary-2-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-gear:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-gear:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-gear:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-gear:before,.monster-icon-secondary-3-gear:before,.monster-icon-tertiary-3-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-gear:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-gear:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-gear:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-gear:before,.monster-icon-secondary-4-gear:before,.monster-icon-tertiary-4-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-home:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-home:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-home:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-home:before,.monster-icon-secondary-1-home:before,.monster-icon-tertiary-1-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-home:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-home:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-home:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-home:before,.monster-icon-secondary-2-home:before,.monster-icon-tertiary-2-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-home:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-home:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-home:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-home:before,.monster-icon-secondary-3-home:before,.monster-icon-tertiary-3-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-home:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-home:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-home:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-home:before,.monster-icon-secondary-4-home:before,.monster-icon-tertiary-4-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-counterclockwise:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-counterclockwise:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-counterclockwise:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-counterclockwise:before,.monster-icon-secondary-1-counterclockwise:before,.monster-icon-tertiary-1-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-counterclockwise:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-counterclockwise:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-counterclockwise:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-counterclockwise:before,.monster-icon-secondary-2-counterclockwise:before,.monster-icon-tertiary-2-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-counterclockwise:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-counterclockwise:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-counterclockwise:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-counterclockwise:before,.monster-icon-secondary-3-counterclockwise:before,.monster-icon-tertiary-3-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-counterclockwise:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-counterclockwise:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-counterclockwise:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-counterclockwise:before,.monster-icon-secondary-4-counterclockwise:before,.monster-icon-tertiary-4-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-2:before{background-color:var(--monster-color-success-2);color:var(--monster-bg-color-success-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-2:before{background-color:var(--monster-color-warning-2);color:var(--monster-bg-color-warning-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-2:before{background-color:var(--monster-color-error-2);color:var(--monster-bg-color-error-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-2:before,.monster-icon-success-2:before,.monster-icon-warning-2:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-3:before{background-color:var(--monster-color-success-3);color:var(--monster-bg-color-success-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-3:before{background-color:var(--monster-color-warning-3);color:var(--monster-bg-color-warning-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-3:before{background-color:var(--monster-color-error-3);color:var(--monster-bg-color-error-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-3:before,.monster-icon-success-3:before,.monster-icon-warning-3:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-1:before{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-1:before{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-1:before{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-1:before,.monster-icon-success-1:before,.monster-icon-warning-1:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-4:before{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-4:before{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-4:before{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-4:before,.monster-icon-success-4:before,.monster-icon-warning-4:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/datatable.mjs b/source/components/datatable/stylesheet/datatable.mjs index 88829685bf7062a2a1d91576d0b9e72bd72c612a..02185572b1cdd97def6b1c2e47b1e0938651a5e0 100644 --- a/source/components/datatable/stylesheet/datatable.mjs +++ b/source/components/datatable/stylesheet/datatable.mjs @@ -20,7 +20,7 @@ const DatatableStyleSheet = new CSSStyleSheet(); try { DatatableStyleSheet.insertRule(` @layer datatable { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}.monster-margin-0{margin:var(--monster-space-0)}.monster-margin-top-0{margin-top:var(--monster-space-0)}.monster-margin-end-0{margin-left:var(--monster-space-0)}.monster-margin-bottom-0{margin-bottom:var(--monster-space-0)}.monster-margin-start-0{margin-left:var(--monster-space-0)}.monster-padding-0{padding:var(--monster-space-0)}.monster-padding-top-0{padding-top:var(--monster-space-0)}.monster-padding-end-0{padding-right:var(--monster-space-0)}.monster-padding-bottom-0{padding-bottom:var(--monster-space-0)}.monster-padding-start-0{padding-left:var(--monster-space-0)}.monster-margin-1{margin:var(--monster-space-1)}.monster-margin-top-1{margin-top:var(--monster-space-1)}.monster-margin-end-1{margin-left:var(--monster-space-1)}.monster-margin-bottom-1{margin-bottom:var(--monster-space-1)}.monster-margin-start-1{margin-left:var(--monster-space-1)}.monster-padding-1{padding:var(--monster-space-1)}.monster-padding-top-1{padding-top:var(--monster-space-1)}.monster-padding-end-1{padding-right:var(--monster-space-1)}.monster-padding-bottom-1{padding-bottom:var(--monster-space-1)}.monster-padding-start-1{padding-left:var(--monster-space-1)}.monster-margin-2{margin:var(--monster-space-2)}.monster-margin-top-2{margin-top:var(--monster-space-2)}.monster-margin-end-2{margin-left:var(--monster-space-2)}.monster-margin-bottom-2{margin-bottom:var(--monster-space-2)}.monster-margin-start-2{margin-left:var(--monster-space-2)}.monster-padding-2{padding:var(--monster-space-2)}.monster-padding-top-2{padding-top:var(--monster-space-2)}.monster-padding-end-2{padding-right:var(--monster-space-2)}.monster-padding-bottom-2{padding-bottom:var(--monster-space-2)}.monster-padding-start-2{padding-left:var(--monster-space-2)}.monster-margin-3{margin:var(--monster-space-3)}.monster-margin-top-3{margin-top:var(--monster-space-3)}.monster-margin-end-3{margin-left:var(--monster-space-3)}.monster-margin-bottom-3{margin-bottom:var(--monster-space-3)}.monster-margin-start-3{margin-left:var(--monster-space-3)}.monster-padding-3{padding:var(--monster-space-3)}.monster-padding-top-3{padding-top:var(--monster-space-3)}.monster-padding-end-3{padding-right:var(--monster-space-3)}.monster-padding-bottom-3{padding-bottom:var(--monster-space-3)}.monster-padding-start-3{padding-left:var(--monster-space-3)}.monster-margin-4{margin:var(--monster-space-4)}.monster-margin-top-4{margin-top:var(--monster-space-4)}.monster-margin-end-4{margin-left:var(--monster-space-4)}.monster-margin-bottom-4{margin-bottom:var(--monster-space-4)}.monster-margin-start-4{margin-left:var(--monster-space-4)}.monster-padding-4{padding:var(--monster-space-4)}.monster-padding-top-4{padding-top:var(--monster-space-4)}.monster-padding-end-4{padding-right:var(--monster-space-4)}.monster-padding-bottom-4{padding-bottom:var(--monster-space-4)}.monster-padding-start-4{padding-left:var(--monster-space-4)}.monster-margin-5{margin:var(--monster-space-5)}.monster-margin-top-5{margin-top:var(--monster-space-5)}.monster-margin-end-5{margin-left:var(--monster-space-5)}.monster-margin-bottom-5{margin-bottom:var(--monster-space-5)}.monster-margin-start-5{margin-left:var(--monster-space-5)}.monster-padding-5{padding:var(--monster-space-5)}.monster-padding-top-5{padding-top:var(--monster-space-5)}.monster-padding-end-5{padding-right:var(--monster-space-5)}.monster-padding-bottom-5{padding-bottom:var(--monster-space-5)}.monster-padding-start-5{padding-left:var(--monster-space-5)}.monster-margin-6{margin:var(--monster-space-6)}.monster-margin-top-6{margin-top:var(--monster-space-6)}.monster-margin-end-6{margin-left:var(--monster-space-6)}.monster-margin-bottom-6{margin-bottom:var(--monster-space-6)}.monster-margin-start-6{margin-left:var(--monster-space-6)}.monster-padding-6{padding:var(--monster-space-6)}.monster-padding-top-6{padding-top:var(--monster-space-6)}.monster-padding-end-6{padding-right:var(--monster-space-6)}.monster-padding-bottom-6{padding-bottom:var(--monster-space-6)}.monster-padding-start-6{padding-left:var(--monster-space-6)}.monster-margin-7{margin:var(--monster-space-7)}.monster-margin-top-7{margin-top:var(--monster-space-7)}.monster-margin-end-7{margin-left:var(--monster-space-7)}.monster-margin-bottom-7{margin-bottom:var(--monster-space-7)}.monster-margin-start-7{margin-left:var(--monster-space-7)}.monster-padding-7{padding:var(--monster-space-7)}.monster-padding-top-7{padding-top:var(--monster-space-7)}.monster-padding-end-7{padding-right:var(--monster-space-7)}.monster-padding-bottom-7{padding-bottom:var(--monster-space-7)}.monster-padding-start-7{padding-left:var(--monster-space-7)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}[data-monster-role=control]{display:flex;flex-direction:column;outline:none;width:100%}.table-container{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);display:block;font-size:1rem;font-weight:400;line-height:1.6;min-width:-moz-fit-content;min-width:fit-content;overflow-x:auto;padding:20px;text-align:justify;width:100%}.table-container .bar{align-content:center;align-items:center;display:flex;flex-direction:row-reverse;gap:2rem}:host{margin:0;padding:0}::slotted(.monster-button-group){margin:0!important}::slotted(.monster-button-group){align-items:center;display:flex;flex-direction:row!important}[data-monster-role=datatable]{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}[data-monster-role=datatable],[data-monster-role=datatable]>div{box-sizing:border-box;font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}[data-monster-role=datatable]>div{align-items:center;border-bottom:1px dashed var(--monster-bg-color-primary-2);display:flex;justify-content:flex-start;line-height:1.2;min-width:0;overflow:auto;padding:.4rem .2rem}[data-monster-role=datatable]>div.start{justify-content:flex-start}[data-monster-role=datatable]>div.end{justify-content:flex-end}[data-monster-role=datatable]>div.center{justify-content:center}[data-monster-role=datatable]>div input[type=checkbox]{accent-color:var(--monster-bg-color-primary-1)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-0]:hover) [data-monster-insert-reference=row-0]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-1]:hover) [data-monster-insert-reference=row-1]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-2]:hover) [data-monster-insert-reference=row-2]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-3]:hover) [data-monster-insert-reference=row-3]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-4]:hover) [data-monster-insert-reference=row-4]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-5]:hover) [data-monster-insert-reference=row-5]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-6]:hover) [data-monster-insert-reference=row-6]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-7]:hover) [data-monster-insert-reference=row-7]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-8]:hover) [data-monster-insert-reference=row-8]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-9]:hover) [data-monster-insert-reference=row-9]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-10]:hover) [data-monster-insert-reference=row-10]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-11]:hover) [data-monster-insert-reference=row-11]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-12]:hover) [data-monster-insert-reference=row-12]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-13]:hover) [data-monster-insert-reference=row-13]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-14]:hover) [data-monster-insert-reference=row-14]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-15]:hover) [data-monster-insert-reference=row-15]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-16]:hover) [data-monster-insert-reference=row-16]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-17]:hover) [data-monster-insert-reference=row-17]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-18]:hover) [data-monster-insert-reference=row-18]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-19]:hover) [data-monster-insert-reference=row-19]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-20]:hover) [data-monster-insert-reference=row-20]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-21]:hover) [data-monster-insert-reference=row-21]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-22]:hover) [data-monster-insert-reference=row-22]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-23]:hover) [data-monster-insert-reference=row-23]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-24]:hover) [data-monster-insert-reference=row-24]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-25]:hover) [data-monster-insert-reference=row-25]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-26]:hover) [data-monster-insert-reference=row-26]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-27]:hover) [data-monster-insert-reference=row-27]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-28]:hover) [data-monster-insert-reference=row-28]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-29]:hover) [data-monster-insert-reference=row-29]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-30]:hover) [data-monster-insert-reference=row-30]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-31]:hover) [data-monster-insert-reference=row-31]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-32]:hover) [data-monster-insert-reference=row-32]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-33]:hover) [data-monster-insert-reference=row-33]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-34]:hover) [data-monster-insert-reference=row-34]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-35]:hover) [data-monster-insert-reference=row-35]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-36]:hover) [data-monster-insert-reference=row-36]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-37]:hover) [data-monster-insert-reference=row-37]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-38]:hover) [data-monster-insert-reference=row-38]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-39]:hover) [data-monster-insert-reference=row-39]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-40]:hover) [data-monster-insert-reference=row-40]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-41]:hover) [data-monster-insert-reference=row-41]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-42]:hover) [data-monster-insert-reference=row-42]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-43]:hover) [data-monster-insert-reference=row-43]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-44]:hover) [data-monster-insert-reference=row-44]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-45]:hover) [data-monster-insert-reference=row-45]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-46]:hover) [data-monster-insert-reference=row-46]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-47]:hover) [data-monster-insert-reference=row-47]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-48]:hover) [data-monster-insert-reference=row-48]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-49]:hover) [data-monster-insert-reference=row-49]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-50]:hover) [data-monster-insert-reference=row-50]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-51]:hover) [data-monster-insert-reference=row-51]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-52]:hover) [data-monster-insert-reference=row-52]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-53]:hover) [data-monster-insert-reference=row-53]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-54]:hover) [data-monster-insert-reference=row-54]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-55]:hover) [data-monster-insert-reference=row-55]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-56]:hover) [data-monster-insert-reference=row-56]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-57]:hover) [data-monster-insert-reference=row-57]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-58]:hover) [data-monster-insert-reference=row-58]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-59]:hover) [data-monster-insert-reference=row-59]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-60]:hover) [data-monster-insert-reference=row-60]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-61]:hover) [data-monster-insert-reference=row-61]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-62]:hover) [data-monster-insert-reference=row-62]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-63]:hover) [data-monster-insert-reference=row-63]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-64]:hover) [data-monster-insert-reference=row-64]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-65]:hover) [data-monster-insert-reference=row-65]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-66]:hover) [data-monster-insert-reference=row-66]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-67]:hover) [data-monster-insert-reference=row-67]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-68]:hover) [data-monster-insert-reference=row-68]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-69]:hover) [data-monster-insert-reference=row-69]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-70]:hover) [data-monster-insert-reference=row-70]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-71]:hover) [data-monster-insert-reference=row-71]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-72]:hover) [data-monster-insert-reference=row-72]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-73]:hover) [data-monster-insert-reference=row-73]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-74]:hover) [data-monster-insert-reference=row-74]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-75]:hover) [data-monster-insert-reference=row-75]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-76]:hover) [data-monster-insert-reference=row-76]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-77]:hover) [data-monster-insert-reference=row-77]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-78]:hover) [data-monster-insert-reference=row-78]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-79]:hover) [data-monster-insert-reference=row-79]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-80]:hover) [data-monster-insert-reference=row-80]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-81]:hover) [data-monster-insert-reference=row-81]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-82]:hover) [data-monster-insert-reference=row-82]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-83]:hover) [data-monster-insert-reference=row-83]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-84]:hover) [data-monster-insert-reference=row-84]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-85]:hover) [data-monster-insert-reference=row-85]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-86]:hover) [data-monster-insert-reference=row-86]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-87]:hover) [data-monster-insert-reference=row-87]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-88]:hover) [data-monster-insert-reference=row-88]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-89]:hover) [data-monster-insert-reference=row-89]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-90]:hover) [data-monster-insert-reference=row-90]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-91]:hover) [data-monster-insert-reference=row-91]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-92]:hover) [data-monster-insert-reference=row-92]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-93]:hover) [data-monster-insert-reference=row-93]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-94]:hover) [data-monster-insert-reference=row-94]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-95]:hover) [data-monster-insert-reference=row-95]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-96]:hover) [data-monster-insert-reference=row-96]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-97]:hover) [data-monster-insert-reference=row-97]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-98]:hover) [data-monster-insert-reference=row-98]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-99]:hover) [data-monster-insert-reference=row-99]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-100]:hover) [data-monster-insert-reference=row-100]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-101]:hover) [data-monster-insert-reference=row-101]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-102]:hover) [data-monster-insert-reference=row-102]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-103]:hover) [data-monster-insert-reference=row-103]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-104]:hover) [data-monster-insert-reference=row-104]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-105]:hover) [data-monster-insert-reference=row-105]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-106]:hover) [data-monster-insert-reference=row-106]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-107]:hover) [data-monster-insert-reference=row-107]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-108]:hover) [data-monster-insert-reference=row-108]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-109]:hover) [data-monster-insert-reference=row-109]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-110]:hover) [data-monster-insert-reference=row-110]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-111]:hover) [data-monster-insert-reference=row-111]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-112]:hover) [data-monster-insert-reference=row-112]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-113]:hover) [data-monster-insert-reference=row-113]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-114]:hover) [data-monster-insert-reference=row-114]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-115]:hover) [data-monster-insert-reference=row-115]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-116]:hover) [data-monster-insert-reference=row-116]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-117]:hover) [data-monster-insert-reference=row-117]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-118]:hover) [data-monster-insert-reference=row-118]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-119]:hover) [data-monster-insert-reference=row-119]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-120]:hover) [data-monster-insert-reference=row-120]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-121]:hover) [data-monster-insert-reference=row-121]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-122]:hover) [data-monster-insert-reference=row-122]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-123]:hover) [data-monster-insert-reference=row-123]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-124]:hover) [data-monster-insert-reference=row-124]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-125]:hover) [data-monster-insert-reference=row-125]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-126]:hover) [data-monster-insert-reference=row-126]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-127]:hover) [data-monster-insert-reference=row-127]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-128]:hover) [data-monster-insert-reference=row-128]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-129]:hover) [data-monster-insert-reference=row-129]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-130]:hover) [data-monster-insert-reference=row-130]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-131]:hover) [data-monster-insert-reference=row-131]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-132]:hover) [data-monster-insert-reference=row-132]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-133]:hover) [data-monster-insert-reference=row-133]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-134]:hover) [data-monster-insert-reference=row-134]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-135]:hover) [data-monster-insert-reference=row-135]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-136]:hover) [data-monster-insert-reference=row-136]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-137]:hover) [data-monster-insert-reference=row-137]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-138]:hover) [data-monster-insert-reference=row-138]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-139]:hover) [data-monster-insert-reference=row-139]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-140]:hover) [data-monster-insert-reference=row-140]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-141]:hover) [data-monster-insert-reference=row-141]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-142]:hover) [data-monster-insert-reference=row-142]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-143]:hover) [data-monster-insert-reference=row-143]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-144]:hover) [data-monster-insert-reference=row-144]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-145]:hover) [data-monster-insert-reference=row-145]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-146]:hover) [data-monster-insert-reference=row-146]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-147]:hover) [data-monster-insert-reference=row-147]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-148]:hover) [data-monster-insert-reference=row-148]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-149]:hover) [data-monster-insert-reference=row-149]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-150]:hover) [data-monster-insert-reference=row-150]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-151]:hover) [data-monster-insert-reference=row-151]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-152]:hover) [data-monster-insert-reference=row-152]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-153]:hover) [data-monster-insert-reference=row-153]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-154]:hover) [data-monster-insert-reference=row-154]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-155]:hover) [data-monster-insert-reference=row-155]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-156]:hover) [data-monster-insert-reference=row-156]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-157]:hover) [data-monster-insert-reference=row-157]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-158]:hover) [data-monster-insert-reference=row-158]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-159]:hover) [data-monster-insert-reference=row-159]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-160]:hover) [data-monster-insert-reference=row-160]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-161]:hover) [data-monster-insert-reference=row-161]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-162]:hover) [data-monster-insert-reference=row-162]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-163]:hover) [data-monster-insert-reference=row-163]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-164]:hover) [data-monster-insert-reference=row-164]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-165]:hover) [data-monster-insert-reference=row-165]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-166]:hover) [data-monster-insert-reference=row-166]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-167]:hover) [data-monster-insert-reference=row-167]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-168]:hover) [data-monster-insert-reference=row-168]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-169]:hover) [data-monster-insert-reference=row-169]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-170]:hover) [data-monster-insert-reference=row-170]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-171]:hover) [data-monster-insert-reference=row-171]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-172]:hover) [data-monster-insert-reference=row-172]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-173]:hover) [data-monster-insert-reference=row-173]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-174]:hover) [data-monster-insert-reference=row-174]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-175]:hover) [data-monster-insert-reference=row-175]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-176]:hover) [data-monster-insert-reference=row-176]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-177]:hover) [data-monster-insert-reference=row-177]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-178]:hover) [data-monster-insert-reference=row-178]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-179]:hover) [data-monster-insert-reference=row-179]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-180]:hover) [data-monster-insert-reference=row-180]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-181]:hover) [data-monster-insert-reference=row-181]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-182]:hover) [data-monster-insert-reference=row-182]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-183]:hover) [data-monster-insert-reference=row-183]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-184]:hover) [data-monster-insert-reference=row-184]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-185]:hover) [data-monster-insert-reference=row-185]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-186]:hover) [data-monster-insert-reference=row-186]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-187]:hover) [data-monster-insert-reference=row-187]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-188]:hover) [data-monster-insert-reference=row-188]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-189]:hover) [data-monster-insert-reference=row-189]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-190]:hover) [data-monster-insert-reference=row-190]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-191]:hover) [data-monster-insert-reference=row-191]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-192]:hover) [data-monster-insert-reference=row-192]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-193]:hover) [data-monster-insert-reference=row-193]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-194]:hover) [data-monster-insert-reference=row-194]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-195]:hover) [data-monster-insert-reference=row-195]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-196]:hover) [data-monster-insert-reference=row-196]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-197]:hover) [data-monster-insert-reference=row-197]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-198]:hover) [data-monster-insert-reference=row-198]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-199]:hover) [data-monster-insert-reference=row-199]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-200]:hover) [data-monster-insert-reference=row-200]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-201]:hover) [data-monster-insert-reference=row-201]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-202]:hover) [data-monster-insert-reference=row-202]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-203]:hover) [data-monster-insert-reference=row-203]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-204]:hover) [data-monster-insert-reference=row-204]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-205]:hover) [data-monster-insert-reference=row-205]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-206]:hover) [data-monster-insert-reference=row-206]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-207]:hover) [data-monster-insert-reference=row-207]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-208]:hover) [data-monster-insert-reference=row-208]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-209]:hover) [data-monster-insert-reference=row-209]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-210]:hover) [data-monster-insert-reference=row-210]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-211]:hover) [data-monster-insert-reference=row-211]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-212]:hover) [data-monster-insert-reference=row-212]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-213]:hover) [data-monster-insert-reference=row-213]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-214]:hover) [data-monster-insert-reference=row-214]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-215]:hover) [data-monster-insert-reference=row-215]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-216]:hover) [data-monster-insert-reference=row-216]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-217]:hover) [data-monster-insert-reference=row-217]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-218]:hover) [data-monster-insert-reference=row-218]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-219]:hover) [data-monster-insert-reference=row-219]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-220]:hover) [data-monster-insert-reference=row-220]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-221]:hover) [data-monster-insert-reference=row-221]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-222]:hover) [data-monster-insert-reference=row-222]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-223]:hover) [data-monster-insert-reference=row-223]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-224]:hover) [data-monster-insert-reference=row-224]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-225]:hover) [data-monster-insert-reference=row-225]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-226]:hover) [data-monster-insert-reference=row-226]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-227]:hover) [data-monster-insert-reference=row-227]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-228]:hover) [data-monster-insert-reference=row-228]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-229]:hover) [data-monster-insert-reference=row-229]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-230]:hover) [data-monster-insert-reference=row-230]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-231]:hover) [data-monster-insert-reference=row-231]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-232]:hover) [data-monster-insert-reference=row-232]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-233]:hover) [data-monster-insert-reference=row-233]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-234]:hover) [data-monster-insert-reference=row-234]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-235]:hover) [data-monster-insert-reference=row-235]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-236]:hover) [data-monster-insert-reference=row-236]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-237]:hover) [data-monster-insert-reference=row-237]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-238]:hover) [data-monster-insert-reference=row-238]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-239]:hover) [data-monster-insert-reference=row-239]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-240]:hover) [data-monster-insert-reference=row-240]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-241]:hover) [data-monster-insert-reference=row-241]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-242]:hover) [data-monster-insert-reference=row-242]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-243]:hover) [data-monster-insert-reference=row-243]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-244]:hover) [data-monster-insert-reference=row-244]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-245]:hover) [data-monster-insert-reference=row-245]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-246]:hover) [data-monster-insert-reference=row-246]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-247]:hover) [data-monster-insert-reference=row-247]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-248]:hover) [data-monster-insert-reference=row-248]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-249]:hover) [data-monster-insert-reference=row-249]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-250]:hover) [data-monster-insert-reference=row-250]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-251]:hover) [data-monster-insert-reference=row-251]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-252]:hover) [data-monster-insert-reference=row-252]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-253]:hover) [data-monster-insert-reference=row-253]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-254]:hover) [data-monster-insert-reference=row-254]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-255]:hover) [data-monster-insert-reference=row-255]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-256]:hover) [data-monster-insert-reference=row-256]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-257]:hover) [data-monster-insert-reference=row-257]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-258]:hover) [data-monster-insert-reference=row-258]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-259]:hover) [data-monster-insert-reference=row-259]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-260]:hover) [data-monster-insert-reference=row-260]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-261]:hover) [data-monster-insert-reference=row-261]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-262]:hover) [data-monster-insert-reference=row-262]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-263]:hover) [data-monster-insert-reference=row-263]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-264]:hover) [data-monster-insert-reference=row-264]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-265]:hover) [data-monster-insert-reference=row-265]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-266]:hover) [data-monster-insert-reference=row-266]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-267]:hover) [data-monster-insert-reference=row-267]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-268]:hover) [data-monster-insert-reference=row-268]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-269]:hover) [data-monster-insert-reference=row-269]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-270]:hover) [data-monster-insert-reference=row-270]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-271]:hover) [data-monster-insert-reference=row-271]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-272]:hover) [data-monster-insert-reference=row-272]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-273]:hover) [data-monster-insert-reference=row-273]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-274]:hover) [data-monster-insert-reference=row-274]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-275]:hover) [data-monster-insert-reference=row-275]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-276]:hover) [data-monster-insert-reference=row-276]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-277]:hover) [data-monster-insert-reference=row-277]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-278]:hover) [data-monster-insert-reference=row-278]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-279]:hover) [data-monster-insert-reference=row-279]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-280]:hover) [data-monster-insert-reference=row-280]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-281]:hover) [data-monster-insert-reference=row-281]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-282]:hover) [data-monster-insert-reference=row-282]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-283]:hover) [data-monster-insert-reference=row-283]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-284]:hover) [data-monster-insert-reference=row-284]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-285]:hover) [data-monster-insert-reference=row-285]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-286]:hover) [data-monster-insert-reference=row-286]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-287]:hover) [data-monster-insert-reference=row-287]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-288]:hover) [data-monster-insert-reference=row-288]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-289]:hover) [data-monster-insert-reference=row-289]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-290]:hover) [data-monster-insert-reference=row-290]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-291]:hover) [data-monster-insert-reference=row-291]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-292]:hover) [data-monster-insert-reference=row-292]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-293]:hover) [data-monster-insert-reference=row-293]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-294]:hover) [data-monster-insert-reference=row-294]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-295]:hover) [data-monster-insert-reference=row-295]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-296]:hover) [data-monster-insert-reference=row-296]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-297]:hover) [data-monster-insert-reference=row-297]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-298]:hover) [data-monster-insert-reference=row-298]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-299]:hover) [data-monster-insert-reference=row-299]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-300]:hover) [data-monster-insert-reference=row-300]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-301]:hover) [data-monster-insert-reference=row-301]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-302]:hover) [data-monster-insert-reference=row-302]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-303]:hover) [data-monster-insert-reference=row-303]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-304]:hover) [data-monster-insert-reference=row-304]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-305]:hover) [data-monster-insert-reference=row-305]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-306]:hover) [data-monster-insert-reference=row-306]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-307]:hover) [data-monster-insert-reference=row-307]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-308]:hover) [data-monster-insert-reference=row-308]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-309]:hover) [data-monster-insert-reference=row-309]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-310]:hover) [data-monster-insert-reference=row-310]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-311]:hover) [data-monster-insert-reference=row-311]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-312]:hover) [data-monster-insert-reference=row-312]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-313]:hover) [data-monster-insert-reference=row-313]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-314]:hover) [data-monster-insert-reference=row-314]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-315]:hover) [data-monster-insert-reference=row-315]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-316]:hover) [data-monster-insert-reference=row-316]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-317]:hover) [data-monster-insert-reference=row-317]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-318]:hover) [data-monster-insert-reference=row-318]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-319]:hover) [data-monster-insert-reference=row-319]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-320]:hover) [data-monster-insert-reference=row-320]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-321]:hover) [data-monster-insert-reference=row-321]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-322]:hover) [data-monster-insert-reference=row-322]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-323]:hover) [data-monster-insert-reference=row-323]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-324]:hover) [data-monster-insert-reference=row-324]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-325]:hover) [data-monster-insert-reference=row-325]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-326]:hover) [data-monster-insert-reference=row-326]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-327]:hover) [data-monster-insert-reference=row-327]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-328]:hover) [data-monster-insert-reference=row-328]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-329]:hover) [data-monster-insert-reference=row-329]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-330]:hover) [data-monster-insert-reference=row-330]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-331]:hover) [data-monster-insert-reference=row-331]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-332]:hover) [data-monster-insert-reference=row-332]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-333]:hover) [data-monster-insert-reference=row-333]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-334]:hover) [data-monster-insert-reference=row-334]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-335]:hover) [data-monster-insert-reference=row-335]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-336]:hover) [data-monster-insert-reference=row-336]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-337]:hover) [data-monster-insert-reference=row-337]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-338]:hover) [data-monster-insert-reference=row-338]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-339]:hover) [data-monster-insert-reference=row-339]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-340]:hover) [data-monster-insert-reference=row-340]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-341]:hover) [data-monster-insert-reference=row-341]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-342]:hover) [data-monster-insert-reference=row-342]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-343]:hover) [data-monster-insert-reference=row-343]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-344]:hover) [data-monster-insert-reference=row-344]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-345]:hover) [data-monster-insert-reference=row-345]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-346]:hover) [data-monster-insert-reference=row-346]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-347]:hover) [data-monster-insert-reference=row-347]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-348]:hover) [data-monster-insert-reference=row-348]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-349]:hover) [data-monster-insert-reference=row-349]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-350]:hover) [data-monster-insert-reference=row-350]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-351]:hover) [data-monster-insert-reference=row-351]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-352]:hover) [data-monster-insert-reference=row-352]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-353]:hover) [data-monster-insert-reference=row-353]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-354]:hover) [data-monster-insert-reference=row-354]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-355]:hover) [data-monster-insert-reference=row-355]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-356]:hover) [data-monster-insert-reference=row-356]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-357]:hover) [data-monster-insert-reference=row-357]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-358]:hover) [data-monster-insert-reference=row-358]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-359]:hover) [data-monster-insert-reference=row-359]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-360]:hover) [data-monster-insert-reference=row-360]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-361]:hover) [data-monster-insert-reference=row-361]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-362]:hover) [data-monster-insert-reference=row-362]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-363]:hover) [data-monster-insert-reference=row-363]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-364]:hover) [data-monster-insert-reference=row-364]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-365]:hover) [data-monster-insert-reference=row-365]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-366]:hover) [data-monster-insert-reference=row-366]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-367]:hover) [data-monster-insert-reference=row-367]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-368]:hover) [data-monster-insert-reference=row-368]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-369]:hover) [data-monster-insert-reference=row-369]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-370]:hover) [data-monster-insert-reference=row-370]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-371]:hover) [data-monster-insert-reference=row-371]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-372]:hover) [data-monster-insert-reference=row-372]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-373]:hover) [data-monster-insert-reference=row-373]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-374]:hover) [data-monster-insert-reference=row-374]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-375]:hover) [data-monster-insert-reference=row-375]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-376]:hover) [data-monster-insert-reference=row-376]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-377]:hover) [data-monster-insert-reference=row-377]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-378]:hover) [data-monster-insert-reference=row-378]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-379]:hover) [data-monster-insert-reference=row-379]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-380]:hover) [data-monster-insert-reference=row-380]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-381]:hover) [data-monster-insert-reference=row-381]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-382]:hover) [data-monster-insert-reference=row-382]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-383]:hover) [data-monster-insert-reference=row-383]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-384]:hover) [data-monster-insert-reference=row-384]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-385]:hover) [data-monster-insert-reference=row-385]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-386]:hover) [data-monster-insert-reference=row-386]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-387]:hover) [data-monster-insert-reference=row-387]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-388]:hover) [data-monster-insert-reference=row-388]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-389]:hover) [data-monster-insert-reference=row-389]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-390]:hover) [data-monster-insert-reference=row-390]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-391]:hover) [data-monster-insert-reference=row-391]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-392]:hover) [data-monster-insert-reference=row-392]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-393]:hover) [data-monster-insert-reference=row-393]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-394]:hover) [data-monster-insert-reference=row-394]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-395]:hover) [data-monster-insert-reference=row-395]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-396]:hover) [data-monster-insert-reference=row-396]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-397]:hover) [data-monster-insert-reference=row-397]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-398]:hover) [data-monster-insert-reference=row-398]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-399]:hover) [data-monster-insert-reference=row-399]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-400]:hover) [data-monster-insert-reference=row-400]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-401]:hover) [data-monster-insert-reference=row-401]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-402]:hover) [data-monster-insert-reference=row-402]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-403]:hover) [data-monster-insert-reference=row-403]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-404]:hover) [data-monster-insert-reference=row-404]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-405]:hover) [data-monster-insert-reference=row-405]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-406]:hover) [data-monster-insert-reference=row-406]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-407]:hover) [data-monster-insert-reference=row-407]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-408]:hover) [data-monster-insert-reference=row-408]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-409]:hover) [data-monster-insert-reference=row-409]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-410]:hover) [data-monster-insert-reference=row-410]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-411]:hover) [data-monster-insert-reference=row-411]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-412]:hover) [data-monster-insert-reference=row-412]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-413]:hover) [data-monster-insert-reference=row-413]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-414]:hover) [data-monster-insert-reference=row-414]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-415]:hover) [data-monster-insert-reference=row-415]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-416]:hover) [data-monster-insert-reference=row-416]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-417]:hover) [data-monster-insert-reference=row-417]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-418]:hover) [data-monster-insert-reference=row-418]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-419]:hover) [data-monster-insert-reference=row-419]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-420]:hover) [data-monster-insert-reference=row-420]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-421]:hover) [data-monster-insert-reference=row-421]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-422]:hover) [data-monster-insert-reference=row-422]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-423]:hover) [data-monster-insert-reference=row-423]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-424]:hover) [data-monster-insert-reference=row-424]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-425]:hover) [data-monster-insert-reference=row-425]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-426]:hover) [data-monster-insert-reference=row-426]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-427]:hover) [data-monster-insert-reference=row-427]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-428]:hover) [data-monster-insert-reference=row-428]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-429]:hover) [data-monster-insert-reference=row-429]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-430]:hover) [data-monster-insert-reference=row-430]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-431]:hover) [data-monster-insert-reference=row-431]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-432]:hover) [data-monster-insert-reference=row-432]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-433]:hover) [data-monster-insert-reference=row-433]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-434]:hover) [data-monster-insert-reference=row-434]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-435]:hover) [data-monster-insert-reference=row-435]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-436]:hover) [data-monster-insert-reference=row-436]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-437]:hover) [data-monster-insert-reference=row-437]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-438]:hover) [data-monster-insert-reference=row-438]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-439]:hover) [data-monster-insert-reference=row-439]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-440]:hover) [data-monster-insert-reference=row-440]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-441]:hover) [data-monster-insert-reference=row-441]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-442]:hover) [data-monster-insert-reference=row-442]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-443]:hover) [data-monster-insert-reference=row-443]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-444]:hover) [data-monster-insert-reference=row-444]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-445]:hover) [data-monster-insert-reference=row-445]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-446]:hover) [data-monster-insert-reference=row-446]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-447]:hover) [data-monster-insert-reference=row-447]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-448]:hover) [data-monster-insert-reference=row-448]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-449]:hover) [data-monster-insert-reference=row-449]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-450]:hover) [data-monster-insert-reference=row-450]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-451]:hover) [data-monster-insert-reference=row-451]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-452]:hover) [data-monster-insert-reference=row-452]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-453]:hover) [data-monster-insert-reference=row-453]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-454]:hover) [data-monster-insert-reference=row-454]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-455]:hover) [data-monster-insert-reference=row-455]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-456]:hover) [data-monster-insert-reference=row-456]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-457]:hover) [data-monster-insert-reference=row-457]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-458]:hover) [data-monster-insert-reference=row-458]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-459]:hover) [data-monster-insert-reference=row-459]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-460]:hover) [data-monster-insert-reference=row-460]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-461]:hover) [data-monster-insert-reference=row-461]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-462]:hover) [data-monster-insert-reference=row-462]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-463]:hover) [data-monster-insert-reference=row-463]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-464]:hover) [data-monster-insert-reference=row-464]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-465]:hover) [data-monster-insert-reference=row-465]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-466]:hover) [data-monster-insert-reference=row-466]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-467]:hover) [data-monster-insert-reference=row-467]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-468]:hover) [data-monster-insert-reference=row-468]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-469]:hover) [data-monster-insert-reference=row-469]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-470]:hover) [data-monster-insert-reference=row-470]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-471]:hover) [data-monster-insert-reference=row-471]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-472]:hover) [data-monster-insert-reference=row-472]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-473]:hover) [data-monster-insert-reference=row-473]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-474]:hover) [data-monster-insert-reference=row-474]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-475]:hover) [data-monster-insert-reference=row-475]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-476]:hover) [data-monster-insert-reference=row-476]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-477]:hover) [data-monster-insert-reference=row-477]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-478]:hover) [data-monster-insert-reference=row-478]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-479]:hover) [data-monster-insert-reference=row-479]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-480]:hover) [data-monster-insert-reference=row-480]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-481]:hover) [data-monster-insert-reference=row-481]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-482]:hover) [data-monster-insert-reference=row-482]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-483]:hover) [data-monster-insert-reference=row-483]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-484]:hover) [data-monster-insert-reference=row-484]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-485]:hover) [data-monster-insert-reference=row-485]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-486]:hover) [data-monster-insert-reference=row-486]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-487]:hover) [data-monster-insert-reference=row-487]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-488]:hover) [data-monster-insert-reference=row-488]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-489]:hover) [data-monster-insert-reference=row-489]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-490]:hover) [data-monster-insert-reference=row-490]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-491]:hover) [data-monster-insert-reference=row-491]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-492]:hover) [data-monster-insert-reference=row-492]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-493]:hover) [data-monster-insert-reference=row-493]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-494]:hover) [data-monster-insert-reference=row-494]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-495]:hover) [data-monster-insert-reference=row-495]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-496]:hover) [data-monster-insert-reference=row-496]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-497]:hover) [data-monster-insert-reference=row-497]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-498]:hover) [data-monster-insert-reference=row-498]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-499]:hover) [data-monster-insert-reference=row-499]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable]:has([data-monster-insert-reference=row-500]:hover) [data-monster-insert-reference=row-500]{background-color:var(--monster-bg-color-selection-2);box-sizing:border-box;color:var(--monster-color-selection-2)}[data-monster-role=datatable] .monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}[data-monster-role=datatable] .monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}[data-monster-role=datatable] .monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}[data-monster-role=datatable] .monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}:is([data-monster-role=datatable] .monster-form) label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}[data-monster-role=datatable] .monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}[data-monster-role=datatable] .monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}:is([data-monster-role=datatable] .monster-form) label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}:is([data-monster-role=datatable] .monster-form) label~label{margin-top:1rem}:is([data-monster-role=datatable] .monster-form) label~fieldset{margin-top:1rem}[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}[data-monster-role=datatable] .monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}[data-monster-role=datatable] .monster-form option:checked,[data-monster-role=datatable] .monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=datatable] .monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input:not([type=radio]):not([type=checkbox]),[data-monster-role=datatable] .monster-form label,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{width:100%}[data-monster-role=datatable] .monster-form label input:not([type=radio]):not([type=checkbox]),[data-monster-role=datatable] .monster-form label select,[data-monster-role=datatable] .monster-form label textarea{margin-top:.2rem;width:100%}:is([data-monster-role=datatable] .monster-form) label+input:not([type=radio]):not([type=checkbox]),:is([data-monster-role=datatable] .monster-form) label+select,:is([data-monster-role=datatable] .monster-form) label+textarea{margin-top:.2rem;width:100%}[data-monster-role=datatable] .monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}[data-monster-role=datatable] .monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}:is([data-monster-role=datatable] .monster-form) fieldset~fieldset{margin-top:1rem}[data-monster-role=datatable] .monster-form button{margin:.2rem 0}[data-monster-role=datatable] .monster-form button:first-of-type{margin-top:1rem}[data-monster-role=datatable] .monster-form button:last-of-type{margin-bottom:1rem}[data-monster-role=datatable] .monster-form input:focus-visible{outline:none}[data-monster-role=datatable] .monster-form button:focus,[data-monster-role=datatable] .monster-form input:focus,[data-monster-role=datatable] .monster-form select:focus,[data-monster-role=datatable] .monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}[data-monster-role=datatable] .monster-form button:focus,[data-monster-role=datatable] .monster-form input:focus,[data-monster-role=datatable] .monster-form select:focus,[data-monster-role=datatable] .monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}[data-monster-role=datatable] .monster-form button:hover,[data-monster-role=datatable] .monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),[data-monster-role=datatable] .monster-form select:hover,[data-monster-role=datatable] .monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=footer]{align-items:center;box-sizing:border-box;display:flex;padding:5px 20px}[data-monster-role=footer]>slot{display:flex;justify-content:flex-start;width:-moz-fit-content;width:fit-content}[data-monster-role=footer]>slot.hidden{display:none}[data-monster-role=datatable-headers]{display:grid}[data-monster-role=datatable-headers]>div{align-items:center;display:flex;font-size:1rem;font-weight:400;font-weight:700;justify-content:flex-start;line-height:1.6;max-width:100%;overflow:hidden;padding:.3rem .2rem;text-align:justify;text-overflow:ellipsis;white-space:nowrap}[data-monster-role=datatable-headers]>div a[data-monster-sortable]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M11.5 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L11 2.707V14.5a.5.5 0 0 0 .5.5m-7-14a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V1.5a.5.5 0 0 1 .5-.5'/%3E%3C/svg%3E\");margin:0 3px 0 5px}[data-monster-role=datatable-headers]>div a[data-monster-sortable~=DESC i]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5'/%3E%3C/svg%3E\")}[data-monster-role=datatable-headers]>div a[data-monster-sortable~=ASC i]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1'/%3E%3C/svg%3E\")}[data-monster-role=datatable-headers] .flex-start{justify-content:flex-start}[data-monster-role=datatable-headers] .flex-end{justify-content:flex-end}[data-monster-role=datatable-headers] .flex-center{justify-content:center}.filter{margin:0 0 20px}.hidden{display:none}monster-state[data-monster-role=empty-without-action]::part(action){display:none}.empty-state-container{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);padding:var(--monster-space-7) 0}@media (max-width:768px){.table-container .bar{align-items:flex-end;display:flex;flex-direction:column-reverse;gap:.1rem}.table-container:has([data-monster-insert-reference=row-0]:hover) [data-monster-insert-reference=row-0]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-1]:hover) [data-monster-insert-reference=row-1]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-2]:hover) [data-monster-insert-reference=row-2]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-3]:hover) [data-monster-insert-reference=row-3]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-4]:hover) [data-monster-insert-reference=row-4]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-5]:hover) [data-monster-insert-reference=row-5]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-6]:hover) [data-monster-insert-reference=row-6]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-7]:hover) [data-monster-insert-reference=row-7]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-8]:hover) [data-monster-insert-reference=row-8]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-9]:hover) [data-monster-insert-reference=row-9]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-10]:hover) [data-monster-insert-reference=row-10]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-11]:hover) [data-monster-insert-reference=row-11]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-12]:hover) [data-monster-insert-reference=row-12]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-13]:hover) [data-monster-insert-reference=row-13]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-14]:hover) [data-monster-insert-reference=row-14]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-15]:hover) [data-monster-insert-reference=row-15]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-16]:hover) [data-monster-insert-reference=row-16]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-17]:hover) [data-monster-insert-reference=row-17]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-18]:hover) [data-monster-insert-reference=row-18]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-19]:hover) [data-monster-insert-reference=row-19]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-20]:hover) [data-monster-insert-reference=row-20]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-21]:hover) [data-monster-insert-reference=row-21]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-22]:hover) [data-monster-insert-reference=row-22]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-23]:hover) [data-monster-insert-reference=row-23]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-24]:hover) [data-monster-insert-reference=row-24]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-25]:hover) [data-monster-insert-reference=row-25]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-26]:hover) [data-monster-insert-reference=row-26]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-27]:hover) [data-monster-insert-reference=row-27]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-28]:hover) [data-monster-insert-reference=row-28]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-29]:hover) [data-monster-insert-reference=row-29]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-30]:hover) [data-monster-insert-reference=row-30]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-31]:hover) [data-monster-insert-reference=row-31]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-32]:hover) [data-monster-insert-reference=row-32]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-33]:hover) [data-monster-insert-reference=row-33]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-34]:hover) [data-monster-insert-reference=row-34]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-35]:hover) [data-monster-insert-reference=row-35]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-36]:hover) [data-monster-insert-reference=row-36]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-37]:hover) [data-monster-insert-reference=row-37]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-38]:hover) [data-monster-insert-reference=row-38]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-39]:hover) [data-monster-insert-reference=row-39]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-40]:hover) [data-monster-insert-reference=row-40]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-41]:hover) [data-monster-insert-reference=row-41]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-42]:hover) [data-monster-insert-reference=row-42]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-43]:hover) [data-monster-insert-reference=row-43]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-44]:hover) [data-monster-insert-reference=row-44]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-45]:hover) [data-monster-insert-reference=row-45]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-46]:hover) [data-monster-insert-reference=row-46]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-47]:hover) [data-monster-insert-reference=row-47]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-48]:hover) [data-monster-insert-reference=row-48]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-49]:hover) [data-monster-insert-reference=row-49]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-50]:hover) [data-monster-insert-reference=row-50]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-51]:hover) [data-monster-insert-reference=row-51]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-52]:hover) [data-monster-insert-reference=row-52]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-53]:hover) [data-monster-insert-reference=row-53]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-54]:hover) [data-monster-insert-reference=row-54]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-55]:hover) [data-monster-insert-reference=row-55]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-56]:hover) [data-monster-insert-reference=row-56]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-57]:hover) [data-monster-insert-reference=row-57]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-58]:hover) [data-monster-insert-reference=row-58]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-59]:hover) [data-monster-insert-reference=row-59]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-60]:hover) [data-monster-insert-reference=row-60]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-61]:hover) [data-monster-insert-reference=row-61]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-62]:hover) [data-monster-insert-reference=row-62]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-63]:hover) [data-monster-insert-reference=row-63]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-64]:hover) [data-monster-insert-reference=row-64]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-65]:hover) [data-monster-insert-reference=row-65]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-66]:hover) [data-monster-insert-reference=row-66]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-67]:hover) [data-monster-insert-reference=row-67]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-68]:hover) [data-monster-insert-reference=row-68]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-69]:hover) [data-monster-insert-reference=row-69]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-70]:hover) [data-monster-insert-reference=row-70]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-71]:hover) [data-monster-insert-reference=row-71]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-72]:hover) [data-monster-insert-reference=row-72]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-73]:hover) [data-monster-insert-reference=row-73]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-74]:hover) [data-monster-insert-reference=row-74]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-75]:hover) [data-monster-insert-reference=row-75]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-76]:hover) [data-monster-insert-reference=row-76]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-77]:hover) [data-monster-insert-reference=row-77]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-78]:hover) [data-monster-insert-reference=row-78]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-79]:hover) [data-monster-insert-reference=row-79]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-80]:hover) [data-monster-insert-reference=row-80]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-81]:hover) [data-monster-insert-reference=row-81]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-82]:hover) [data-monster-insert-reference=row-82]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-83]:hover) [data-monster-insert-reference=row-83]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-84]:hover) [data-monster-insert-reference=row-84]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-85]:hover) [data-monster-insert-reference=row-85]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-86]:hover) [data-monster-insert-reference=row-86]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-87]:hover) [data-monster-insert-reference=row-87]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-88]:hover) [data-monster-insert-reference=row-88]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-89]:hover) [data-monster-insert-reference=row-89]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-90]:hover) [data-monster-insert-reference=row-90]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-91]:hover) [data-monster-insert-reference=row-91]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-92]:hover) [data-monster-insert-reference=row-92]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-93]:hover) [data-monster-insert-reference=row-93]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-94]:hover) [data-monster-insert-reference=row-94]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-95]:hover) [data-monster-insert-reference=row-95]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-96]:hover) [data-monster-insert-reference=row-96]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-97]:hover) [data-monster-insert-reference=row-97]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-98]:hover) [data-monster-insert-reference=row-98]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-99]:hover) [data-monster-insert-reference=row-99]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-100]:hover) [data-monster-insert-reference=row-100]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-101]:hover) [data-monster-insert-reference=row-101]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-102]:hover) [data-monster-insert-reference=row-102]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-103]:hover) [data-monster-insert-reference=row-103]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-104]:hover) [data-monster-insert-reference=row-104]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-105]:hover) [data-monster-insert-reference=row-105]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-106]:hover) [data-monster-insert-reference=row-106]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-107]:hover) [data-monster-insert-reference=row-107]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-108]:hover) [data-monster-insert-reference=row-108]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-109]:hover) [data-monster-insert-reference=row-109]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-110]:hover) [data-monster-insert-reference=row-110]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-111]:hover) [data-monster-insert-reference=row-111]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-112]:hover) [data-monster-insert-reference=row-112]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-113]:hover) [data-monster-insert-reference=row-113]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-114]:hover) [data-monster-insert-reference=row-114]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-115]:hover) [data-monster-insert-reference=row-115]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-116]:hover) [data-monster-insert-reference=row-116]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-117]:hover) [data-monster-insert-reference=row-117]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-118]:hover) [data-monster-insert-reference=row-118]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-119]:hover) [data-monster-insert-reference=row-119]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-120]:hover) [data-monster-insert-reference=row-120]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-121]:hover) [data-monster-insert-reference=row-121]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-122]:hover) [data-monster-insert-reference=row-122]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-123]:hover) [data-monster-insert-reference=row-123]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-124]:hover) [data-monster-insert-reference=row-124]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-125]:hover) [data-monster-insert-reference=row-125]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-126]:hover) [data-monster-insert-reference=row-126]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-127]:hover) [data-monster-insert-reference=row-127]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-128]:hover) [data-monster-insert-reference=row-128]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-129]:hover) [data-monster-insert-reference=row-129]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-130]:hover) [data-monster-insert-reference=row-130]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-131]:hover) [data-monster-insert-reference=row-131]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-132]:hover) [data-monster-insert-reference=row-132]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-133]:hover) [data-monster-insert-reference=row-133]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-134]:hover) [data-monster-insert-reference=row-134]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-135]:hover) [data-monster-insert-reference=row-135]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-136]:hover) [data-monster-insert-reference=row-136]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-137]:hover) [data-monster-insert-reference=row-137]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-138]:hover) [data-monster-insert-reference=row-138]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-139]:hover) [data-monster-insert-reference=row-139]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-140]:hover) [data-monster-insert-reference=row-140]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-141]:hover) [data-monster-insert-reference=row-141]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-142]:hover) [data-monster-insert-reference=row-142]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-143]:hover) [data-monster-insert-reference=row-143]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-144]:hover) [data-monster-insert-reference=row-144]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-145]:hover) [data-monster-insert-reference=row-145]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-146]:hover) [data-monster-insert-reference=row-146]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-147]:hover) [data-monster-insert-reference=row-147]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-148]:hover) [data-monster-insert-reference=row-148]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-149]:hover) [data-monster-insert-reference=row-149]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-150]:hover) [data-monster-insert-reference=row-150]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-151]:hover) [data-monster-insert-reference=row-151]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-152]:hover) [data-monster-insert-reference=row-152]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-153]:hover) [data-monster-insert-reference=row-153]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-154]:hover) [data-monster-insert-reference=row-154]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-155]:hover) [data-monster-insert-reference=row-155]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-156]:hover) [data-monster-insert-reference=row-156]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-157]:hover) [data-monster-insert-reference=row-157]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-158]:hover) [data-monster-insert-reference=row-158]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-159]:hover) [data-monster-insert-reference=row-159]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-160]:hover) [data-monster-insert-reference=row-160]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-161]:hover) [data-monster-insert-reference=row-161]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-162]:hover) [data-monster-insert-reference=row-162]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-163]:hover) [data-monster-insert-reference=row-163]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-164]:hover) [data-monster-insert-reference=row-164]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-165]:hover) [data-monster-insert-reference=row-165]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-166]:hover) [data-monster-insert-reference=row-166]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-167]:hover) [data-monster-insert-reference=row-167]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-168]:hover) [data-monster-insert-reference=row-168]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-169]:hover) [data-monster-insert-reference=row-169]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-170]:hover) [data-monster-insert-reference=row-170]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-171]:hover) [data-monster-insert-reference=row-171]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-172]:hover) [data-monster-insert-reference=row-172]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-173]:hover) [data-monster-insert-reference=row-173]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-174]:hover) [data-monster-insert-reference=row-174]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-175]:hover) [data-monster-insert-reference=row-175]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-176]:hover) [data-monster-insert-reference=row-176]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-177]:hover) [data-monster-insert-reference=row-177]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-178]:hover) [data-monster-insert-reference=row-178]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-179]:hover) [data-monster-insert-reference=row-179]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-180]:hover) [data-monster-insert-reference=row-180]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-181]:hover) [data-monster-insert-reference=row-181]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-182]:hover) [data-monster-insert-reference=row-182]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-183]:hover) [data-monster-insert-reference=row-183]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-184]:hover) [data-monster-insert-reference=row-184]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-185]:hover) [data-monster-insert-reference=row-185]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-186]:hover) [data-monster-insert-reference=row-186]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-187]:hover) [data-monster-insert-reference=row-187]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-188]:hover) [data-monster-insert-reference=row-188]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-189]:hover) [data-monster-insert-reference=row-189]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-190]:hover) [data-monster-insert-reference=row-190]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-191]:hover) [data-monster-insert-reference=row-191]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-192]:hover) [data-monster-insert-reference=row-192]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-193]:hover) [data-monster-insert-reference=row-193]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-194]:hover) [data-monster-insert-reference=row-194]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-195]:hover) [data-monster-insert-reference=row-195]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-196]:hover) [data-monster-insert-reference=row-196]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-197]:hover) [data-monster-insert-reference=row-197]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-198]:hover) [data-monster-insert-reference=row-198]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-199]:hover) [data-monster-insert-reference=row-199]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-200]:hover) [data-monster-insert-reference=row-200]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-201]:hover) [data-monster-insert-reference=row-201]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-202]:hover) [data-monster-insert-reference=row-202]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-203]:hover) [data-monster-insert-reference=row-203]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-204]:hover) [data-monster-insert-reference=row-204]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-205]:hover) [data-monster-insert-reference=row-205]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-206]:hover) [data-monster-insert-reference=row-206]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-207]:hover) [data-monster-insert-reference=row-207]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-208]:hover) [data-monster-insert-reference=row-208]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-209]:hover) [data-monster-insert-reference=row-209]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-210]:hover) [data-monster-insert-reference=row-210]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-211]:hover) [data-monster-insert-reference=row-211]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-212]:hover) [data-monster-insert-reference=row-212]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-213]:hover) [data-monster-insert-reference=row-213]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-214]:hover) [data-monster-insert-reference=row-214]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-215]:hover) [data-monster-insert-reference=row-215]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-216]:hover) [data-monster-insert-reference=row-216]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-217]:hover) [data-monster-insert-reference=row-217]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-218]:hover) [data-monster-insert-reference=row-218]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-219]:hover) [data-monster-insert-reference=row-219]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-220]:hover) [data-monster-insert-reference=row-220]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-221]:hover) [data-monster-insert-reference=row-221]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-222]:hover) [data-monster-insert-reference=row-222]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-223]:hover) [data-monster-insert-reference=row-223]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-224]:hover) [data-monster-insert-reference=row-224]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-225]:hover) [data-monster-insert-reference=row-225]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-226]:hover) [data-monster-insert-reference=row-226]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-227]:hover) [data-monster-insert-reference=row-227]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-228]:hover) [data-monster-insert-reference=row-228]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-229]:hover) [data-monster-insert-reference=row-229]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-230]:hover) [data-monster-insert-reference=row-230]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-231]:hover) [data-monster-insert-reference=row-231]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-232]:hover) [data-monster-insert-reference=row-232]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-233]:hover) [data-monster-insert-reference=row-233]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-234]:hover) [data-monster-insert-reference=row-234]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-235]:hover) [data-monster-insert-reference=row-235]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-236]:hover) [data-monster-insert-reference=row-236]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-237]:hover) [data-monster-insert-reference=row-237]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-238]:hover) [data-monster-insert-reference=row-238]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-239]:hover) [data-monster-insert-reference=row-239]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-240]:hover) [data-monster-insert-reference=row-240]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-241]:hover) [data-monster-insert-reference=row-241]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-242]:hover) [data-monster-insert-reference=row-242]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-243]:hover) [data-monster-insert-reference=row-243]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-244]:hover) [data-monster-insert-reference=row-244]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-245]:hover) [data-monster-insert-reference=row-245]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-246]:hover) [data-monster-insert-reference=row-246]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-247]:hover) [data-monster-insert-reference=row-247]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-248]:hover) [data-monster-insert-reference=row-248]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-249]:hover) [data-monster-insert-reference=row-249]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-250]:hover) [data-monster-insert-reference=row-250]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-251]:hover) [data-monster-insert-reference=row-251]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-252]:hover) [data-monster-insert-reference=row-252]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-253]:hover) [data-monster-insert-reference=row-253]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-254]:hover) [data-monster-insert-reference=row-254]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-255]:hover) [data-monster-insert-reference=row-255]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-256]:hover) [data-monster-insert-reference=row-256]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-257]:hover) [data-monster-insert-reference=row-257]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-258]:hover) [data-monster-insert-reference=row-258]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-259]:hover) [data-monster-insert-reference=row-259]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-260]:hover) [data-monster-insert-reference=row-260]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-261]:hover) [data-monster-insert-reference=row-261]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-262]:hover) [data-monster-insert-reference=row-262]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-263]:hover) [data-monster-insert-reference=row-263]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-264]:hover) [data-monster-insert-reference=row-264]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-265]:hover) [data-monster-insert-reference=row-265]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-266]:hover) [data-monster-insert-reference=row-266]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-267]:hover) [data-monster-insert-reference=row-267]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-268]:hover) [data-monster-insert-reference=row-268]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-269]:hover) [data-monster-insert-reference=row-269]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-270]:hover) [data-monster-insert-reference=row-270]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-271]:hover) [data-monster-insert-reference=row-271]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-272]:hover) [data-monster-insert-reference=row-272]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-273]:hover) [data-monster-insert-reference=row-273]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-274]:hover) [data-monster-insert-reference=row-274]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-275]:hover) [data-monster-insert-reference=row-275]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-276]:hover) [data-monster-insert-reference=row-276]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-277]:hover) [data-monster-insert-reference=row-277]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-278]:hover) [data-monster-insert-reference=row-278]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-279]:hover) [data-monster-insert-reference=row-279]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-280]:hover) [data-monster-insert-reference=row-280]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-281]:hover) [data-monster-insert-reference=row-281]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-282]:hover) [data-monster-insert-reference=row-282]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-283]:hover) [data-monster-insert-reference=row-283]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-284]:hover) [data-monster-insert-reference=row-284]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-285]:hover) [data-monster-insert-reference=row-285]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-286]:hover) [data-monster-insert-reference=row-286]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-287]:hover) [data-monster-insert-reference=row-287]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-288]:hover) [data-monster-insert-reference=row-288]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-289]:hover) [data-monster-insert-reference=row-289]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-290]:hover) [data-monster-insert-reference=row-290]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-291]:hover) [data-monster-insert-reference=row-291]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-292]:hover) [data-monster-insert-reference=row-292]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-293]:hover) [data-monster-insert-reference=row-293]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-294]:hover) [data-monster-insert-reference=row-294]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-295]:hover) [data-monster-insert-reference=row-295]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-296]:hover) [data-monster-insert-reference=row-296]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-297]:hover) [data-monster-insert-reference=row-297]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-298]:hover) [data-monster-insert-reference=row-298]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-299]:hover) [data-monster-insert-reference=row-299]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-300]:hover) [data-monster-insert-reference=row-300]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-301]:hover) [data-monster-insert-reference=row-301]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-302]:hover) [data-monster-insert-reference=row-302]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-303]:hover) [data-monster-insert-reference=row-303]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-304]:hover) [data-monster-insert-reference=row-304]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-305]:hover) [data-monster-insert-reference=row-305]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-306]:hover) [data-monster-insert-reference=row-306]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-307]:hover) [data-monster-insert-reference=row-307]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-308]:hover) [data-monster-insert-reference=row-308]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-309]:hover) [data-monster-insert-reference=row-309]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-310]:hover) [data-monster-insert-reference=row-310]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-311]:hover) [data-monster-insert-reference=row-311]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-312]:hover) [data-monster-insert-reference=row-312]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-313]:hover) [data-monster-insert-reference=row-313]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-314]:hover) [data-monster-insert-reference=row-314]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-315]:hover) [data-monster-insert-reference=row-315]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-316]:hover) [data-monster-insert-reference=row-316]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-317]:hover) [data-monster-insert-reference=row-317]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-318]:hover) [data-monster-insert-reference=row-318]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-319]:hover) [data-monster-insert-reference=row-319]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-320]:hover) [data-monster-insert-reference=row-320]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-321]:hover) [data-monster-insert-reference=row-321]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-322]:hover) [data-monster-insert-reference=row-322]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-323]:hover) [data-monster-insert-reference=row-323]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-324]:hover) [data-monster-insert-reference=row-324]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-325]:hover) [data-monster-insert-reference=row-325]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-326]:hover) [data-monster-insert-reference=row-326]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-327]:hover) [data-monster-insert-reference=row-327]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-328]:hover) [data-monster-insert-reference=row-328]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-329]:hover) [data-monster-insert-reference=row-329]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-330]:hover) [data-monster-insert-reference=row-330]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-331]:hover) [data-monster-insert-reference=row-331]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-332]:hover) [data-monster-insert-reference=row-332]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-333]:hover) [data-monster-insert-reference=row-333]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-334]:hover) [data-monster-insert-reference=row-334]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-335]:hover) [data-monster-insert-reference=row-335]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-336]:hover) [data-monster-insert-reference=row-336]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-337]:hover) [data-monster-insert-reference=row-337]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-338]:hover) [data-monster-insert-reference=row-338]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-339]:hover) [data-monster-insert-reference=row-339]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-340]:hover) [data-monster-insert-reference=row-340]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-341]:hover) [data-monster-insert-reference=row-341]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-342]:hover) [data-monster-insert-reference=row-342]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-343]:hover) [data-monster-insert-reference=row-343]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-344]:hover) [data-monster-insert-reference=row-344]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-345]:hover) [data-monster-insert-reference=row-345]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-346]:hover) [data-monster-insert-reference=row-346]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-347]:hover) [data-monster-insert-reference=row-347]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-348]:hover) [data-monster-insert-reference=row-348]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-349]:hover) [data-monster-insert-reference=row-349]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-350]:hover) [data-monster-insert-reference=row-350]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-351]:hover) [data-monster-insert-reference=row-351]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-352]:hover) [data-monster-insert-reference=row-352]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-353]:hover) [data-monster-insert-reference=row-353]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-354]:hover) [data-monster-insert-reference=row-354]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-355]:hover) [data-monster-insert-reference=row-355]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-356]:hover) [data-monster-insert-reference=row-356]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-357]:hover) [data-monster-insert-reference=row-357]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-358]:hover) [data-monster-insert-reference=row-358]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-359]:hover) [data-monster-insert-reference=row-359]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-360]:hover) [data-monster-insert-reference=row-360]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-361]:hover) [data-monster-insert-reference=row-361]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-362]:hover) [data-monster-insert-reference=row-362]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-363]:hover) [data-monster-insert-reference=row-363]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-364]:hover) [data-monster-insert-reference=row-364]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-365]:hover) [data-monster-insert-reference=row-365]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-366]:hover) [data-monster-insert-reference=row-366]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-367]:hover) [data-monster-insert-reference=row-367]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-368]:hover) [data-monster-insert-reference=row-368]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-369]:hover) [data-monster-insert-reference=row-369]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-370]:hover) [data-monster-insert-reference=row-370]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-371]:hover) [data-monster-insert-reference=row-371]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-372]:hover) [data-monster-insert-reference=row-372]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-373]:hover) [data-monster-insert-reference=row-373]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-374]:hover) [data-monster-insert-reference=row-374]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-375]:hover) [data-monster-insert-reference=row-375]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-376]:hover) [data-monster-insert-reference=row-376]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-377]:hover) [data-monster-insert-reference=row-377]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-378]:hover) [data-monster-insert-reference=row-378]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-379]:hover) [data-monster-insert-reference=row-379]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-380]:hover) [data-monster-insert-reference=row-380]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-381]:hover) [data-monster-insert-reference=row-381]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-382]:hover) [data-monster-insert-reference=row-382]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-383]:hover) [data-monster-insert-reference=row-383]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-384]:hover) [data-monster-insert-reference=row-384]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-385]:hover) [data-monster-insert-reference=row-385]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-386]:hover) [data-monster-insert-reference=row-386]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-387]:hover) [data-monster-insert-reference=row-387]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-388]:hover) [data-monster-insert-reference=row-388]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-389]:hover) [data-monster-insert-reference=row-389]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-390]:hover) [data-monster-insert-reference=row-390]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-391]:hover) [data-monster-insert-reference=row-391]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-392]:hover) [data-monster-insert-reference=row-392]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-393]:hover) [data-monster-insert-reference=row-393]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-394]:hover) [data-monster-insert-reference=row-394]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-395]:hover) [data-monster-insert-reference=row-395]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-396]:hover) [data-monster-insert-reference=row-396]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-397]:hover) [data-monster-insert-reference=row-397]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-398]:hover) [data-monster-insert-reference=row-398]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-399]:hover) [data-monster-insert-reference=row-399]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-400]:hover) [data-monster-insert-reference=row-400]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-401]:hover) [data-monster-insert-reference=row-401]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-402]:hover) [data-monster-insert-reference=row-402]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-403]:hover) [data-monster-insert-reference=row-403]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-404]:hover) [data-monster-insert-reference=row-404]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-405]:hover) [data-monster-insert-reference=row-405]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-406]:hover) [data-monster-insert-reference=row-406]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-407]:hover) [data-monster-insert-reference=row-407]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-408]:hover) [data-monster-insert-reference=row-408]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-409]:hover) [data-monster-insert-reference=row-409]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-410]:hover) [data-monster-insert-reference=row-410]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-411]:hover) [data-monster-insert-reference=row-411]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-412]:hover) [data-monster-insert-reference=row-412]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-413]:hover) [data-monster-insert-reference=row-413]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-414]:hover) [data-monster-insert-reference=row-414]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-415]:hover) [data-monster-insert-reference=row-415]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-416]:hover) [data-monster-insert-reference=row-416]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-417]:hover) [data-monster-insert-reference=row-417]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-418]:hover) [data-monster-insert-reference=row-418]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-419]:hover) [data-monster-insert-reference=row-419]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-420]:hover) [data-monster-insert-reference=row-420]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-421]:hover) [data-monster-insert-reference=row-421]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-422]:hover) [data-monster-insert-reference=row-422]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-423]:hover) [data-monster-insert-reference=row-423]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-424]:hover) [data-monster-insert-reference=row-424]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-425]:hover) [data-monster-insert-reference=row-425]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-426]:hover) [data-monster-insert-reference=row-426]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-427]:hover) [data-monster-insert-reference=row-427]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-428]:hover) [data-monster-insert-reference=row-428]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-429]:hover) [data-monster-insert-reference=row-429]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-430]:hover) [data-monster-insert-reference=row-430]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-431]:hover) [data-monster-insert-reference=row-431]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-432]:hover) [data-monster-insert-reference=row-432]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-433]:hover) [data-monster-insert-reference=row-433]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-434]:hover) [data-monster-insert-reference=row-434]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-435]:hover) [data-monster-insert-reference=row-435]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-436]:hover) [data-monster-insert-reference=row-436]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-437]:hover) [data-monster-insert-reference=row-437]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-438]:hover) [data-monster-insert-reference=row-438]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-439]:hover) [data-monster-insert-reference=row-439]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-440]:hover) [data-monster-insert-reference=row-440]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-441]:hover) [data-monster-insert-reference=row-441]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-442]:hover) [data-monster-insert-reference=row-442]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-443]:hover) [data-monster-insert-reference=row-443]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-444]:hover) [data-monster-insert-reference=row-444]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-445]:hover) [data-monster-insert-reference=row-445]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-446]:hover) [data-monster-insert-reference=row-446]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-447]:hover) [data-monster-insert-reference=row-447]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-448]:hover) [data-monster-insert-reference=row-448]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-449]:hover) [data-monster-insert-reference=row-449]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-450]:hover) [data-monster-insert-reference=row-450]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-451]:hover) [data-monster-insert-reference=row-451]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-452]:hover) [data-monster-insert-reference=row-452]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-453]:hover) [data-monster-insert-reference=row-453]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-454]:hover) [data-monster-insert-reference=row-454]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-455]:hover) [data-monster-insert-reference=row-455]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-456]:hover) [data-monster-insert-reference=row-456]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-457]:hover) [data-monster-insert-reference=row-457]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-458]:hover) [data-monster-insert-reference=row-458]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-459]:hover) [data-monster-insert-reference=row-459]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-460]:hover) [data-monster-insert-reference=row-460]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-461]:hover) [data-monster-insert-reference=row-461]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-462]:hover) [data-monster-insert-reference=row-462]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-463]:hover) [data-monster-insert-reference=row-463]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-464]:hover) [data-monster-insert-reference=row-464]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-465]:hover) [data-monster-insert-reference=row-465]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-466]:hover) [data-monster-insert-reference=row-466]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-467]:hover) [data-monster-insert-reference=row-467]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-468]:hover) [data-monster-insert-reference=row-468]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-469]:hover) [data-monster-insert-reference=row-469]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-470]:hover) [data-monster-insert-reference=row-470]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-471]:hover) [data-monster-insert-reference=row-471]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-472]:hover) [data-monster-insert-reference=row-472]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-473]:hover) [data-monster-insert-reference=row-473]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-474]:hover) [data-monster-insert-reference=row-474]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-475]:hover) [data-monster-insert-reference=row-475]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-476]:hover) [data-monster-insert-reference=row-476]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-477]:hover) [data-monster-insert-reference=row-477]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-478]:hover) [data-monster-insert-reference=row-478]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-479]:hover) [data-monster-insert-reference=row-479]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-480]:hover) [data-monster-insert-reference=row-480]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-481]:hover) [data-monster-insert-reference=row-481]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-482]:hover) [data-monster-insert-reference=row-482]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-483]:hover) [data-monster-insert-reference=row-483]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-484]:hover) [data-monster-insert-reference=row-484]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-485]:hover) [data-monster-insert-reference=row-485]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-486]:hover) [data-monster-insert-reference=row-486]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-487]:hover) [data-monster-insert-reference=row-487]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-488]:hover) [data-monster-insert-reference=row-488]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-489]:hover) [data-monster-insert-reference=row-489]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-490]:hover) [data-monster-insert-reference=row-490]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-491]:hover) [data-monster-insert-reference=row-491]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-492]:hover) [data-monster-insert-reference=row-492]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-493]:hover) [data-monster-insert-reference=row-493]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-494]:hover) [data-monster-insert-reference=row-494]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-495]:hover) [data-monster-insert-reference=row-495]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-496]:hover) [data-monster-insert-reference=row-496]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-497]:hover) [data-monster-insert-reference=row-497]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-498]:hover) [data-monster-insert-reference=row-498]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-499]:hover) [data-monster-insert-reference=row-499]{backgroud-color:red;box-sizing:border-box}.table-container:has([data-monster-insert-reference=row-500]:hover) [data-monster-insert-reference=row-500]{backgroud-color:red;box-sizing:border-box}::slotted(.monster-button-group){display:flex;flex-direction:column!important}} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}.monster-margin-0{margin:var(--monster-space-0)}.monster-margin-top-0{margin-top:var(--monster-space-0)}.monster-margin-end-0{margin-left:var(--monster-space-0)}.monster-margin-bottom-0{margin-bottom:var(--monster-space-0)}.monster-margin-start-0{margin-left:var(--monster-space-0)}.monster-padding-0{padding:var(--monster-space-0)}.monster-padding-top-0{padding-top:var(--monster-space-0)}.monster-padding-end-0{padding-right:var(--monster-space-0)}.monster-padding-bottom-0{padding-bottom:var(--monster-space-0)}.monster-padding-start-0{padding-left:var(--monster-space-0)}.monster-margin-1{margin:var(--monster-space-1)}.monster-margin-top-1{margin-top:var(--monster-space-1)}.monster-margin-end-1{margin-left:var(--monster-space-1)}.monster-margin-bottom-1{margin-bottom:var(--monster-space-1)}.monster-margin-start-1{margin-left:var(--monster-space-1)}.monster-padding-1{padding:var(--monster-space-1)}.monster-padding-top-1{padding-top:var(--monster-space-1)}.monster-padding-end-1{padding-right:var(--monster-space-1)}.monster-padding-bottom-1{padding-bottom:var(--monster-space-1)}.monster-padding-start-1{padding-left:var(--monster-space-1)}.monster-margin-2{margin:var(--monster-space-2)}.monster-margin-top-2{margin-top:var(--monster-space-2)}.monster-margin-end-2{margin-left:var(--monster-space-2)}.monster-margin-bottom-2{margin-bottom:var(--monster-space-2)}.monster-margin-start-2{margin-left:var(--monster-space-2)}.monster-padding-2{padding:var(--monster-space-2)}.monster-padding-top-2{padding-top:var(--monster-space-2)}.monster-padding-end-2{padding-right:var(--monster-space-2)}.monster-padding-bottom-2{padding-bottom:var(--monster-space-2)}.monster-padding-start-2{padding-left:var(--monster-space-2)}.monster-margin-3{margin:var(--monster-space-3)}.monster-margin-top-3{margin-top:var(--monster-space-3)}.monster-margin-end-3{margin-left:var(--monster-space-3)}.monster-margin-bottom-3{margin-bottom:var(--monster-space-3)}.monster-margin-start-3{margin-left:var(--monster-space-3)}.monster-padding-3{padding:var(--monster-space-3)}.monster-padding-top-3{padding-top:var(--monster-space-3)}.monster-padding-end-3{padding-right:var(--monster-space-3)}.monster-padding-bottom-3{padding-bottom:var(--monster-space-3)}.monster-padding-start-3{padding-left:var(--monster-space-3)}.monster-margin-4{margin:var(--monster-space-4)}.monster-margin-top-4{margin-top:var(--monster-space-4)}.monster-margin-end-4{margin-left:var(--monster-space-4)}.monster-margin-bottom-4{margin-bottom:var(--monster-space-4)}.monster-margin-start-4{margin-left:var(--monster-space-4)}.monster-padding-4{padding:var(--monster-space-4)}.monster-padding-top-4{padding-top:var(--monster-space-4)}.monster-padding-end-4{padding-right:var(--monster-space-4)}.monster-padding-bottom-4{padding-bottom:var(--monster-space-4)}.monster-padding-start-4{padding-left:var(--monster-space-4)}.monster-margin-5{margin:var(--monster-space-5)}.monster-margin-top-5{margin-top:var(--monster-space-5)}.monster-margin-end-5{margin-left:var(--monster-space-5)}.monster-margin-bottom-5{margin-bottom:var(--monster-space-5)}.monster-margin-start-5{margin-left:var(--monster-space-5)}.monster-padding-5{padding:var(--monster-space-5)}.monster-padding-top-5{padding-top:var(--monster-space-5)}.monster-padding-end-5{padding-right:var(--monster-space-5)}.monster-padding-bottom-5{padding-bottom:var(--monster-space-5)}.monster-padding-start-5{padding-left:var(--monster-space-5)}.monster-margin-6{margin:var(--monster-space-6)}.monster-margin-top-6{margin-top:var(--monster-space-6)}.monster-margin-end-6{margin-left:var(--monster-space-6)}.monster-margin-bottom-6{margin-bottom:var(--monster-space-6)}.monster-margin-start-6{margin-left:var(--monster-space-6)}.monster-padding-6{padding:var(--monster-space-6)}.monster-padding-top-6{padding-top:var(--monster-space-6)}.monster-padding-end-6{padding-right:var(--monster-space-6)}.monster-padding-bottom-6{padding-bottom:var(--monster-space-6)}.monster-padding-start-6{padding-left:var(--monster-space-6)}.monster-margin-7{margin:var(--monster-space-7)}.monster-margin-top-7{margin-top:var(--monster-space-7)}.monster-margin-end-7{margin-left:var(--monster-space-7)}.monster-margin-bottom-7{margin-bottom:var(--monster-space-7)}.monster-margin-start-7{margin-left:var(--monster-space-7)}.monster-padding-7{padding:var(--monster-space-7)}.monster-padding-top-7{padding-top:var(--monster-space-7)}.monster-padding-end-7{padding-right:var(--monster-space-7)}.monster-padding-bottom-7{padding-bottom:var(--monster-space-7)}.monster-padding-start-7{padding-left:var(--monster-space-7)}.monster-icon-primary-1-info:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-info:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-info:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-info:before,.monster-icon-secondary-1-info:before,.monster-icon-tertiary-1-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-info:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-info:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-info:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-info:before,.monster-icon-secondary-2-info:before,.monster-icon-tertiary-2-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-info:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-info:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-info:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-info:before,.monster-icon-secondary-3-info:before,.monster-icon-tertiary-3-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-info:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-info:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-info:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-info:before,.monster-icon-secondary-4-info:before,.monster-icon-tertiary-4-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-on:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-on:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-on:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-on:before,.monster-icon-secondary-1-on:before,.monster-icon-tertiary-1-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-on:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-on:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-on:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-on:before,.monster-icon-secondary-2-on:before,.monster-icon-tertiary-2-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-on:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-on:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-on:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-on:before,.monster-icon-secondary-3-on:before,.monster-icon-tertiary-3-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-on:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-on:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-on:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-on:before,.monster-icon-secondary-4-on:before,.monster-icon-tertiary-4-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-off:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-off:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-off:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-off:before,.monster-icon-secondary-1-off:before,.monster-icon-tertiary-1-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-off:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-off:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-off:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-off:before,.monster-icon-secondary-2-off:before,.monster-icon-tertiary-2-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-off:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-off:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-off:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-off:before,.monster-icon-secondary-3-off:before,.monster-icon-tertiary-3-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-off:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-off:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-off:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-off:before,.monster-icon-secondary-4-off:before,.monster-icon-tertiary-4-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-positiv:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-positiv:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-positiv:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-positiv:before,.monster-icon-secondary-1-positiv:before,.monster-icon-tertiary-1-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-positiv:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-positiv:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-positiv:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-positiv:before,.monster-icon-secondary-2-positiv:before,.monster-icon-tertiary-2-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-positiv:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-positiv:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-positiv:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-positiv:before,.monster-icon-secondary-3-positiv:before,.monster-icon-tertiary-3-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-positiv:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-positiv:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-positiv:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-positiv:before,.monster-icon-secondary-4-positiv:before,.monster-icon-tertiary-4-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-negativ:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-negativ:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-negativ:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-negativ:before,.monster-icon-secondary-1-negativ:before,.monster-icon-tertiary-1-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-negativ:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-negativ:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-negativ:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-negativ:before,.monster-icon-secondary-2-negativ:before,.monster-icon-tertiary-2-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-negativ:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-negativ:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-negativ:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-negativ:before,.monster-icon-secondary-3-negativ:before,.monster-icon-tertiary-3-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-negativ:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-negativ:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-negativ:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-negativ:before,.monster-icon-secondary-4-negativ:before,.monster-icon-tertiary-4-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-warning:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-warning:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-warning:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-warning:before,.monster-icon-secondary-1-warning:before,.monster-icon-tertiary-1-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-warning:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-warning:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-warning:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-warning:before,.monster-icon-secondary-2-warning:before,.monster-icon-tertiary-2-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-warning:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-warning:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-warning:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-warning:before,.monster-icon-secondary-3-warning:before,.monster-icon-tertiary-3-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-warning:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-warning:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-warning:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-warning:before,.monster-icon-secondary-4-warning:before,.monster-icon-tertiary-4-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-neutral:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-neutral:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-neutral:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-neutral:before,.monster-icon-secondary-1-neutral:before,.monster-icon-tertiary-1-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-neutral:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-neutral:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-neutral:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-neutral:before,.monster-icon-secondary-2-neutral:before,.monster-icon-tertiary-2-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-neutral:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-neutral:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-neutral:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-neutral:before,.monster-icon-secondary-3-neutral:before,.monster-icon-tertiary-3-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-neutral:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-neutral:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-neutral:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-neutral:before,.monster-icon-secondary-4-neutral:before,.monster-icon-tertiary-4-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-question:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-question:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-question:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-question:before,.monster-icon-secondary-1-question:before,.monster-icon-tertiary-1-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-question:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-question:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-question:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-question:before,.monster-icon-secondary-2-question:before,.monster-icon-tertiary-2-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-question:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-question:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-question:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-question:before,.monster-icon-secondary-3-question:before,.monster-icon-tertiary-3-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-question:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-question:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-question:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-question:before,.monster-icon-secondary-4-question:before,.monster-icon-tertiary-4-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-plus:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-plus:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-plus:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-plus:before,.monster-icon-secondary-1-plus:before,.monster-icon-tertiary-1-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-plus:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-plus:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-plus:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-plus:before,.monster-icon-secondary-2-plus:before,.monster-icon-tertiary-2-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-plus:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-plus:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-plus:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-plus:before,.monster-icon-secondary-3-plus:before,.monster-icon-tertiary-3-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-plus:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-plus:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-plus:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-plus:before,.monster-icon-secondary-4-plus:before,.monster-icon-tertiary-4-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-dash:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-dash:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-dash:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-dash:before,.monster-icon-secondary-1-dash:before,.monster-icon-tertiary-1-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-dash:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-dash:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-dash:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-dash:before,.monster-icon-secondary-2-dash:before,.monster-icon-tertiary-2-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-dash:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-dash:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-dash:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-dash:before,.monster-icon-secondary-3-dash:before,.monster-icon-tertiary-3-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-dash:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-dash:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-dash:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-dash:before,.monster-icon-secondary-4-dash:before,.monster-icon-tertiary-4-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-gear:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-gear:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-gear:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-gear:before,.monster-icon-secondary-1-gear:before,.monster-icon-tertiary-1-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-gear:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-gear:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-gear:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-gear:before,.monster-icon-secondary-2-gear:before,.monster-icon-tertiary-2-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-gear:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-gear:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-gear:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-gear:before,.monster-icon-secondary-3-gear:before,.monster-icon-tertiary-3-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-gear:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-gear:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-gear:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-gear:before,.monster-icon-secondary-4-gear:before,.monster-icon-tertiary-4-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-home:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-home:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-home:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-home:before,.monster-icon-secondary-1-home:before,.monster-icon-tertiary-1-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-home:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-home:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-home:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-home:before,.monster-icon-secondary-2-home:before,.monster-icon-tertiary-2-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-home:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-home:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-home:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-home:before,.monster-icon-secondary-3-home:before,.monster-icon-tertiary-3-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-home:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-home:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-home:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-home:before,.monster-icon-secondary-4-home:before,.monster-icon-tertiary-4-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-counterclockwise:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-counterclockwise:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-counterclockwise:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-counterclockwise:before,.monster-icon-secondary-1-counterclockwise:before,.monster-icon-tertiary-1-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-counterclockwise:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-counterclockwise:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-counterclockwise:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-counterclockwise:before,.monster-icon-secondary-2-counterclockwise:before,.monster-icon-tertiary-2-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-counterclockwise:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-counterclockwise:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-counterclockwise:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-counterclockwise:before,.monster-icon-secondary-3-counterclockwise:before,.monster-icon-tertiary-3-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-counterclockwise:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-counterclockwise:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-counterclockwise:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-counterclockwise:before,.monster-icon-secondary-4-counterclockwise:before,.monster-icon-tertiary-4-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-2:before{background-color:var(--monster-color-success-2);color:var(--monster-bg-color-success-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-2:before{background-color:var(--monster-color-warning-2);color:var(--monster-bg-color-warning-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-2:before{background-color:var(--monster-color-error-2);color:var(--monster-bg-color-error-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-2:before,.monster-icon-success-2:before,.monster-icon-warning-2:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-3:before{background-color:var(--monster-color-success-3);color:var(--monster-bg-color-success-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-3:before{background-color:var(--monster-color-warning-3);color:var(--monster-bg-color-warning-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-3:before{background-color:var(--monster-color-error-3);color:var(--monster-bg-color-error-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-3:before,.monster-icon-success-3:before,.monster-icon-warning-3:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-1:before{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-1:before{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-1:before{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-1:before,.monster-icon-success-1:before,.monster-icon-warning-1:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-4:before{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-4:before{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-4:before{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-4:before,.monster-icon-success-4:before,.monster-icon-warning-4:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}[data-monster-role=control]{display:flex;flex-direction:column;outline:none;width:100%}[data-monster-role=table-container]{box-sizing:border-box;display:block;font-size:1rem;font-weight:400;line-height:1.6;min-width:-moz-fit-content;min-width:fit-content;overflow-x:auto;padding:20px;text-align:justify;width:100%}[data-monster-role=table-container] .bar{align-content:center;align-items:center;display:flex;flex-direction:row-reverse;gap:2rem}:host{margin:0;padding:0}::slotted(.monster-button-group){margin:0!important}::slotted(.monster-button-group){align-items:center;display:flex;flex-direction:row!important}[data-monster-role=datatable]{display:grid}[data-monster-role=datatable],[data-monster-role=datatable]>div{box-sizing:border-box;font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}[data-monster-role=datatable]>div{align-items:center;border-bottom:1px dashed var(--monster-table-border-color);display:flex;justify-content:flex-start;line-height:1.2;min-width:0;overflow:auto;padding:.4rem .2rem}[data-monster-role=datatable]>div.start{justify-content:flex-start}[data-monster-role=datatable]>div.end{justify-content:flex-end}[data-monster-role=datatable]>div.center{justify-content:center}[data-monster-role=datatable]>div input[type=checkbox]{accent-color:var(--monster-bg-color-primary-1)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-0]:hover) [data-monster-insert-reference$=row-0]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-1]:hover) [data-monster-insert-reference$=row-1]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-2]:hover) [data-monster-insert-reference$=row-2]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-3]:hover) [data-monster-insert-reference$=row-3]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-4]:hover) [data-monster-insert-reference$=row-4]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-5]:hover) [data-monster-insert-reference$=row-5]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-6]:hover) [data-monster-insert-reference$=row-6]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-7]:hover) [data-monster-insert-reference$=row-7]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-8]:hover) [data-monster-insert-reference$=row-8]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-9]:hover) [data-monster-insert-reference$=row-9]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-10]:hover) [data-monster-insert-reference$=row-10]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-11]:hover) [data-monster-insert-reference$=row-11]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-12]:hover) [data-monster-insert-reference$=row-12]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-13]:hover) [data-monster-insert-reference$=row-13]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-14]:hover) [data-monster-insert-reference$=row-14]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-15]:hover) [data-monster-insert-reference$=row-15]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-16]:hover) [data-monster-insert-reference$=row-16]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-17]:hover) [data-monster-insert-reference$=row-17]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-18]:hover) [data-monster-insert-reference$=row-18]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-19]:hover) [data-monster-insert-reference$=row-19]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-20]:hover) [data-monster-insert-reference$=row-20]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-21]:hover) [data-monster-insert-reference$=row-21]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-22]:hover) [data-monster-insert-reference$=row-22]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-23]:hover) [data-monster-insert-reference$=row-23]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-24]:hover) [data-monster-insert-reference$=row-24]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-25]:hover) [data-monster-insert-reference$=row-25]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-26]:hover) [data-monster-insert-reference$=row-26]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-27]:hover) [data-monster-insert-reference$=row-27]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-28]:hover) [data-monster-insert-reference$=row-28]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-29]:hover) [data-monster-insert-reference$=row-29]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-30]:hover) [data-monster-insert-reference$=row-30]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-31]:hover) [data-monster-insert-reference$=row-31]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-32]:hover) [data-monster-insert-reference$=row-32]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-33]:hover) [data-monster-insert-reference$=row-33]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-34]:hover) [data-monster-insert-reference$=row-34]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-35]:hover) [data-monster-insert-reference$=row-35]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-36]:hover) [data-monster-insert-reference$=row-36]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-37]:hover) [data-monster-insert-reference$=row-37]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-38]:hover) [data-monster-insert-reference$=row-38]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-39]:hover) [data-monster-insert-reference$=row-39]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-40]:hover) [data-monster-insert-reference$=row-40]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-41]:hover) [data-monster-insert-reference$=row-41]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-42]:hover) [data-monster-insert-reference$=row-42]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-43]:hover) [data-monster-insert-reference$=row-43]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-44]:hover) [data-monster-insert-reference$=row-44]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-45]:hover) [data-monster-insert-reference$=row-45]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-46]:hover) [data-monster-insert-reference$=row-46]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-47]:hover) [data-monster-insert-reference$=row-47]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-48]:hover) [data-monster-insert-reference$=row-48]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-49]:hover) [data-monster-insert-reference$=row-49]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-50]:hover) [data-monster-insert-reference$=row-50]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-51]:hover) [data-monster-insert-reference$=row-51]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-52]:hover) [data-monster-insert-reference$=row-52]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-53]:hover) [data-monster-insert-reference$=row-53]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-54]:hover) [data-monster-insert-reference$=row-54]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-55]:hover) [data-monster-insert-reference$=row-55]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-56]:hover) [data-monster-insert-reference$=row-56]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-57]:hover) [data-monster-insert-reference$=row-57]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-58]:hover) [data-monster-insert-reference$=row-58]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-59]:hover) [data-monster-insert-reference$=row-59]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-60]:hover) [data-monster-insert-reference$=row-60]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-61]:hover) [data-monster-insert-reference$=row-61]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-62]:hover) [data-monster-insert-reference$=row-62]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-63]:hover) [data-monster-insert-reference$=row-63]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-64]:hover) [data-monster-insert-reference$=row-64]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-65]:hover) [data-monster-insert-reference$=row-65]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-66]:hover) [data-monster-insert-reference$=row-66]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-67]:hover) [data-monster-insert-reference$=row-67]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-68]:hover) [data-monster-insert-reference$=row-68]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-69]:hover) [data-monster-insert-reference$=row-69]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-70]:hover) [data-monster-insert-reference$=row-70]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-71]:hover) [data-monster-insert-reference$=row-71]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-72]:hover) [data-monster-insert-reference$=row-72]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-73]:hover) [data-monster-insert-reference$=row-73]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-74]:hover) [data-monster-insert-reference$=row-74]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-75]:hover) [data-monster-insert-reference$=row-75]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-76]:hover) [data-monster-insert-reference$=row-76]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-77]:hover) [data-monster-insert-reference$=row-77]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-78]:hover) [data-monster-insert-reference$=row-78]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-79]:hover) [data-monster-insert-reference$=row-79]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-80]:hover) [data-monster-insert-reference$=row-80]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-81]:hover) [data-monster-insert-reference$=row-81]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-82]:hover) [data-monster-insert-reference$=row-82]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-83]:hover) [data-monster-insert-reference$=row-83]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-84]:hover) [data-monster-insert-reference$=row-84]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-85]:hover) [data-monster-insert-reference$=row-85]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-86]:hover) [data-monster-insert-reference$=row-86]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-87]:hover) [data-monster-insert-reference$=row-87]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-88]:hover) [data-monster-insert-reference$=row-88]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-89]:hover) [data-monster-insert-reference$=row-89]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-90]:hover) [data-monster-insert-reference$=row-90]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-91]:hover) [data-monster-insert-reference$=row-91]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-92]:hover) [data-monster-insert-reference$=row-92]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-93]:hover) [data-monster-insert-reference$=row-93]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-94]:hover) [data-monster-insert-reference$=row-94]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-95]:hover) [data-monster-insert-reference$=row-95]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-96]:hover) [data-monster-insert-reference$=row-96]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-97]:hover) [data-monster-insert-reference$=row-97]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-98]:hover) [data-monster-insert-reference$=row-98]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-99]:hover) [data-monster-insert-reference$=row-99]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-100]:hover) [data-monster-insert-reference$=row-100]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-101]:hover) [data-monster-insert-reference$=row-101]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-102]:hover) [data-monster-insert-reference$=row-102]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-103]:hover) [data-monster-insert-reference$=row-103]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-104]:hover) [data-monster-insert-reference$=row-104]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-105]:hover) [data-monster-insert-reference$=row-105]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-106]:hover) [data-monster-insert-reference$=row-106]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-107]:hover) [data-monster-insert-reference$=row-107]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-108]:hover) [data-monster-insert-reference$=row-108]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-109]:hover) [data-monster-insert-reference$=row-109]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-110]:hover) [data-monster-insert-reference$=row-110]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-111]:hover) [data-monster-insert-reference$=row-111]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-112]:hover) [data-monster-insert-reference$=row-112]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-113]:hover) [data-monster-insert-reference$=row-113]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-114]:hover) [data-monster-insert-reference$=row-114]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-115]:hover) [data-monster-insert-reference$=row-115]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-116]:hover) [data-monster-insert-reference$=row-116]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-117]:hover) [data-monster-insert-reference$=row-117]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-118]:hover) [data-monster-insert-reference$=row-118]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-119]:hover) [data-monster-insert-reference$=row-119]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-120]:hover) [data-monster-insert-reference$=row-120]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-121]:hover) [data-monster-insert-reference$=row-121]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-122]:hover) [data-monster-insert-reference$=row-122]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-123]:hover) [data-monster-insert-reference$=row-123]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-124]:hover) [data-monster-insert-reference$=row-124]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-125]:hover) [data-monster-insert-reference$=row-125]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-126]:hover) [data-monster-insert-reference$=row-126]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-127]:hover) [data-monster-insert-reference$=row-127]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-128]:hover) [data-monster-insert-reference$=row-128]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-129]:hover) [data-monster-insert-reference$=row-129]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-130]:hover) [data-monster-insert-reference$=row-130]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-131]:hover) [data-monster-insert-reference$=row-131]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-132]:hover) [data-monster-insert-reference$=row-132]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-133]:hover) [data-monster-insert-reference$=row-133]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-134]:hover) [data-monster-insert-reference$=row-134]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-135]:hover) [data-monster-insert-reference$=row-135]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-136]:hover) [data-monster-insert-reference$=row-136]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-137]:hover) [data-monster-insert-reference$=row-137]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-138]:hover) [data-monster-insert-reference$=row-138]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-139]:hover) [data-monster-insert-reference$=row-139]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-140]:hover) [data-monster-insert-reference$=row-140]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-141]:hover) [data-monster-insert-reference$=row-141]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-142]:hover) [data-monster-insert-reference$=row-142]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-143]:hover) [data-monster-insert-reference$=row-143]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-144]:hover) [data-monster-insert-reference$=row-144]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-145]:hover) [data-monster-insert-reference$=row-145]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-146]:hover) [data-monster-insert-reference$=row-146]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-147]:hover) [data-monster-insert-reference$=row-147]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-148]:hover) [data-monster-insert-reference$=row-148]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-149]:hover) [data-monster-insert-reference$=row-149]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-150]:hover) [data-monster-insert-reference$=row-150]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-151]:hover) [data-monster-insert-reference$=row-151]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-152]:hover) [data-monster-insert-reference$=row-152]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-153]:hover) [data-monster-insert-reference$=row-153]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-154]:hover) [data-monster-insert-reference$=row-154]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-155]:hover) [data-monster-insert-reference$=row-155]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-156]:hover) [data-monster-insert-reference$=row-156]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-157]:hover) [data-monster-insert-reference$=row-157]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-158]:hover) [data-monster-insert-reference$=row-158]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-159]:hover) [data-monster-insert-reference$=row-159]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-160]:hover) [data-monster-insert-reference$=row-160]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-161]:hover) [data-monster-insert-reference$=row-161]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-162]:hover) [data-monster-insert-reference$=row-162]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-163]:hover) [data-monster-insert-reference$=row-163]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-164]:hover) [data-monster-insert-reference$=row-164]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-165]:hover) [data-monster-insert-reference$=row-165]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-166]:hover) [data-monster-insert-reference$=row-166]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-167]:hover) [data-monster-insert-reference$=row-167]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-168]:hover) [data-monster-insert-reference$=row-168]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-169]:hover) [data-monster-insert-reference$=row-169]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-170]:hover) [data-monster-insert-reference$=row-170]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-171]:hover) [data-monster-insert-reference$=row-171]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-172]:hover) [data-monster-insert-reference$=row-172]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-173]:hover) [data-monster-insert-reference$=row-173]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-174]:hover) [data-monster-insert-reference$=row-174]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-175]:hover) [data-monster-insert-reference$=row-175]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-176]:hover) [data-monster-insert-reference$=row-176]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-177]:hover) [data-monster-insert-reference$=row-177]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-178]:hover) [data-monster-insert-reference$=row-178]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-179]:hover) [data-monster-insert-reference$=row-179]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-180]:hover) [data-monster-insert-reference$=row-180]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-181]:hover) [data-monster-insert-reference$=row-181]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-182]:hover) [data-monster-insert-reference$=row-182]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-183]:hover) [data-monster-insert-reference$=row-183]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-184]:hover) [data-monster-insert-reference$=row-184]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-185]:hover) [data-monster-insert-reference$=row-185]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-186]:hover) [data-monster-insert-reference$=row-186]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-187]:hover) [data-monster-insert-reference$=row-187]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-188]:hover) [data-monster-insert-reference$=row-188]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-189]:hover) [data-monster-insert-reference$=row-189]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-190]:hover) [data-monster-insert-reference$=row-190]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-191]:hover) [data-monster-insert-reference$=row-191]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-192]:hover) [data-monster-insert-reference$=row-192]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-193]:hover) [data-monster-insert-reference$=row-193]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-194]:hover) [data-monster-insert-reference$=row-194]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-195]:hover) [data-monster-insert-reference$=row-195]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-196]:hover) [data-monster-insert-reference$=row-196]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-197]:hover) [data-monster-insert-reference$=row-197]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-198]:hover) [data-monster-insert-reference$=row-198]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-199]:hover) [data-monster-insert-reference$=row-199]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-200]:hover) [data-monster-insert-reference$=row-200]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-201]:hover) [data-monster-insert-reference$=row-201]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-202]:hover) [data-monster-insert-reference$=row-202]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-203]:hover) [data-monster-insert-reference$=row-203]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-204]:hover) [data-monster-insert-reference$=row-204]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-205]:hover) [data-monster-insert-reference$=row-205]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-206]:hover) [data-monster-insert-reference$=row-206]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-207]:hover) [data-monster-insert-reference$=row-207]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-208]:hover) [data-monster-insert-reference$=row-208]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-209]:hover) [data-monster-insert-reference$=row-209]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-210]:hover) [data-monster-insert-reference$=row-210]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-211]:hover) [data-monster-insert-reference$=row-211]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-212]:hover) [data-monster-insert-reference$=row-212]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-213]:hover) [data-monster-insert-reference$=row-213]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-214]:hover) [data-monster-insert-reference$=row-214]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-215]:hover) [data-monster-insert-reference$=row-215]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-216]:hover) [data-monster-insert-reference$=row-216]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-217]:hover) [data-monster-insert-reference$=row-217]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-218]:hover) [data-monster-insert-reference$=row-218]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-219]:hover) [data-monster-insert-reference$=row-219]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-220]:hover) [data-monster-insert-reference$=row-220]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-221]:hover) [data-monster-insert-reference$=row-221]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-222]:hover) [data-monster-insert-reference$=row-222]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-223]:hover) [data-monster-insert-reference$=row-223]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-224]:hover) [data-monster-insert-reference$=row-224]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-225]:hover) [data-monster-insert-reference$=row-225]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-226]:hover) [data-monster-insert-reference$=row-226]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-227]:hover) [data-monster-insert-reference$=row-227]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-228]:hover) [data-monster-insert-reference$=row-228]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-229]:hover) [data-monster-insert-reference$=row-229]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-230]:hover) [data-monster-insert-reference$=row-230]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-231]:hover) [data-monster-insert-reference$=row-231]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-232]:hover) [data-monster-insert-reference$=row-232]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-233]:hover) [data-monster-insert-reference$=row-233]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-234]:hover) [data-monster-insert-reference$=row-234]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-235]:hover) [data-monster-insert-reference$=row-235]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-236]:hover) [data-monster-insert-reference$=row-236]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-237]:hover) [data-monster-insert-reference$=row-237]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-238]:hover) [data-monster-insert-reference$=row-238]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-239]:hover) [data-monster-insert-reference$=row-239]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-240]:hover) [data-monster-insert-reference$=row-240]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-241]:hover) [data-monster-insert-reference$=row-241]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-242]:hover) [data-monster-insert-reference$=row-242]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-243]:hover) [data-monster-insert-reference$=row-243]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-244]:hover) [data-monster-insert-reference$=row-244]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-245]:hover) [data-monster-insert-reference$=row-245]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-246]:hover) [data-monster-insert-reference$=row-246]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-247]:hover) [data-monster-insert-reference$=row-247]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-248]:hover) [data-monster-insert-reference$=row-248]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-249]:hover) [data-monster-insert-reference$=row-249]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-250]:hover) [data-monster-insert-reference$=row-250]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-251]:hover) [data-monster-insert-reference$=row-251]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-252]:hover) [data-monster-insert-reference$=row-252]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-253]:hover) [data-monster-insert-reference$=row-253]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-254]:hover) [data-monster-insert-reference$=row-254]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-255]:hover) [data-monster-insert-reference$=row-255]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-256]:hover) [data-monster-insert-reference$=row-256]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-257]:hover) [data-monster-insert-reference$=row-257]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-258]:hover) [data-monster-insert-reference$=row-258]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-259]:hover) [data-monster-insert-reference$=row-259]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-260]:hover) [data-monster-insert-reference$=row-260]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-261]:hover) [data-monster-insert-reference$=row-261]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-262]:hover) [data-monster-insert-reference$=row-262]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-263]:hover) [data-monster-insert-reference$=row-263]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-264]:hover) [data-monster-insert-reference$=row-264]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-265]:hover) [data-monster-insert-reference$=row-265]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-266]:hover) [data-monster-insert-reference$=row-266]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-267]:hover) [data-monster-insert-reference$=row-267]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-268]:hover) [data-monster-insert-reference$=row-268]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-269]:hover) [data-monster-insert-reference$=row-269]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-270]:hover) [data-monster-insert-reference$=row-270]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-271]:hover) [data-monster-insert-reference$=row-271]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-272]:hover) [data-monster-insert-reference$=row-272]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-273]:hover) [data-monster-insert-reference$=row-273]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-274]:hover) [data-monster-insert-reference$=row-274]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-275]:hover) [data-monster-insert-reference$=row-275]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-276]:hover) [data-monster-insert-reference$=row-276]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-277]:hover) [data-monster-insert-reference$=row-277]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-278]:hover) [data-monster-insert-reference$=row-278]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-279]:hover) [data-monster-insert-reference$=row-279]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-280]:hover) [data-monster-insert-reference$=row-280]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-281]:hover) [data-monster-insert-reference$=row-281]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-282]:hover) [data-monster-insert-reference$=row-282]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-283]:hover) [data-monster-insert-reference$=row-283]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-284]:hover) [data-monster-insert-reference$=row-284]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-285]:hover) [data-monster-insert-reference$=row-285]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-286]:hover) [data-monster-insert-reference$=row-286]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-287]:hover) [data-monster-insert-reference$=row-287]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-288]:hover) [data-monster-insert-reference$=row-288]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-289]:hover) [data-monster-insert-reference$=row-289]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-290]:hover) [data-monster-insert-reference$=row-290]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-291]:hover) [data-monster-insert-reference$=row-291]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-292]:hover) [data-monster-insert-reference$=row-292]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-293]:hover) [data-monster-insert-reference$=row-293]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-294]:hover) [data-monster-insert-reference$=row-294]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-295]:hover) [data-monster-insert-reference$=row-295]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-296]:hover) [data-monster-insert-reference$=row-296]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-297]:hover) [data-monster-insert-reference$=row-297]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-298]:hover) [data-monster-insert-reference$=row-298]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-299]:hover) [data-monster-insert-reference$=row-299]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-300]:hover) [data-monster-insert-reference$=row-300]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-301]:hover) [data-monster-insert-reference$=row-301]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-302]:hover) [data-monster-insert-reference$=row-302]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-303]:hover) [data-monster-insert-reference$=row-303]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-304]:hover) [data-monster-insert-reference$=row-304]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-305]:hover) [data-monster-insert-reference$=row-305]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-306]:hover) [data-monster-insert-reference$=row-306]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-307]:hover) [data-monster-insert-reference$=row-307]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-308]:hover) [data-monster-insert-reference$=row-308]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-309]:hover) [data-monster-insert-reference$=row-309]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-310]:hover) [data-monster-insert-reference$=row-310]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-311]:hover) [data-monster-insert-reference$=row-311]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-312]:hover) [data-monster-insert-reference$=row-312]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-313]:hover) [data-monster-insert-reference$=row-313]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-314]:hover) [data-monster-insert-reference$=row-314]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-315]:hover) [data-monster-insert-reference$=row-315]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-316]:hover) [data-monster-insert-reference$=row-316]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-317]:hover) [data-monster-insert-reference$=row-317]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-318]:hover) [data-monster-insert-reference$=row-318]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-319]:hover) [data-monster-insert-reference$=row-319]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-320]:hover) [data-monster-insert-reference$=row-320]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-321]:hover) [data-monster-insert-reference$=row-321]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-322]:hover) [data-monster-insert-reference$=row-322]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-323]:hover) [data-monster-insert-reference$=row-323]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-324]:hover) [data-monster-insert-reference$=row-324]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-325]:hover) [data-monster-insert-reference$=row-325]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-326]:hover) [data-monster-insert-reference$=row-326]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-327]:hover) [data-monster-insert-reference$=row-327]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-328]:hover) [data-monster-insert-reference$=row-328]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-329]:hover) [data-monster-insert-reference$=row-329]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-330]:hover) [data-monster-insert-reference$=row-330]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-331]:hover) [data-monster-insert-reference$=row-331]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-332]:hover) [data-monster-insert-reference$=row-332]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-333]:hover) [data-monster-insert-reference$=row-333]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-334]:hover) [data-monster-insert-reference$=row-334]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-335]:hover) [data-monster-insert-reference$=row-335]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-336]:hover) [data-monster-insert-reference$=row-336]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-337]:hover) [data-monster-insert-reference$=row-337]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-338]:hover) [data-monster-insert-reference$=row-338]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-339]:hover) [data-monster-insert-reference$=row-339]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-340]:hover) [data-monster-insert-reference$=row-340]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-341]:hover) [data-monster-insert-reference$=row-341]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-342]:hover) [data-monster-insert-reference$=row-342]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-343]:hover) [data-monster-insert-reference$=row-343]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-344]:hover) [data-monster-insert-reference$=row-344]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-345]:hover) [data-monster-insert-reference$=row-345]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-346]:hover) [data-monster-insert-reference$=row-346]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-347]:hover) [data-monster-insert-reference$=row-347]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-348]:hover) [data-monster-insert-reference$=row-348]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-349]:hover) [data-monster-insert-reference$=row-349]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-350]:hover) [data-monster-insert-reference$=row-350]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-351]:hover) [data-monster-insert-reference$=row-351]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-352]:hover) [data-monster-insert-reference$=row-352]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-353]:hover) [data-monster-insert-reference$=row-353]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-354]:hover) [data-monster-insert-reference$=row-354]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-355]:hover) [data-monster-insert-reference$=row-355]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-356]:hover) [data-monster-insert-reference$=row-356]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-357]:hover) [data-monster-insert-reference$=row-357]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-358]:hover) [data-monster-insert-reference$=row-358]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-359]:hover) [data-monster-insert-reference$=row-359]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-360]:hover) [data-monster-insert-reference$=row-360]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-361]:hover) [data-monster-insert-reference$=row-361]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-362]:hover) [data-monster-insert-reference$=row-362]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-363]:hover) [data-monster-insert-reference$=row-363]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-364]:hover) [data-monster-insert-reference$=row-364]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-365]:hover) [data-monster-insert-reference$=row-365]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-366]:hover) [data-monster-insert-reference$=row-366]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-367]:hover) [data-monster-insert-reference$=row-367]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-368]:hover) [data-monster-insert-reference$=row-368]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-369]:hover) [data-monster-insert-reference$=row-369]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-370]:hover) [data-monster-insert-reference$=row-370]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-371]:hover) [data-monster-insert-reference$=row-371]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-372]:hover) [data-monster-insert-reference$=row-372]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-373]:hover) [data-monster-insert-reference$=row-373]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-374]:hover) [data-monster-insert-reference$=row-374]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-375]:hover) [data-monster-insert-reference$=row-375]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-376]:hover) [data-monster-insert-reference$=row-376]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-377]:hover) [data-monster-insert-reference$=row-377]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-378]:hover) [data-monster-insert-reference$=row-378]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-379]:hover) [data-monster-insert-reference$=row-379]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-380]:hover) [data-monster-insert-reference$=row-380]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-381]:hover) [data-monster-insert-reference$=row-381]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-382]:hover) [data-monster-insert-reference$=row-382]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-383]:hover) [data-monster-insert-reference$=row-383]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-384]:hover) [data-monster-insert-reference$=row-384]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-385]:hover) [data-monster-insert-reference$=row-385]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-386]:hover) [data-monster-insert-reference$=row-386]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-387]:hover) [data-monster-insert-reference$=row-387]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-388]:hover) [data-monster-insert-reference$=row-388]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-389]:hover) [data-monster-insert-reference$=row-389]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-390]:hover) [data-monster-insert-reference$=row-390]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-391]:hover) [data-monster-insert-reference$=row-391]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-392]:hover) [data-monster-insert-reference$=row-392]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-393]:hover) [data-monster-insert-reference$=row-393]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-394]:hover) [data-monster-insert-reference$=row-394]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-395]:hover) [data-monster-insert-reference$=row-395]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-396]:hover) [data-monster-insert-reference$=row-396]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-397]:hover) [data-monster-insert-reference$=row-397]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-398]:hover) [data-monster-insert-reference$=row-398]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-399]:hover) [data-monster-insert-reference$=row-399]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-400]:hover) [data-monster-insert-reference$=row-400]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-401]:hover) [data-monster-insert-reference$=row-401]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-402]:hover) [data-monster-insert-reference$=row-402]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-403]:hover) [data-monster-insert-reference$=row-403]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-404]:hover) [data-monster-insert-reference$=row-404]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-405]:hover) [data-monster-insert-reference$=row-405]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-406]:hover) [data-monster-insert-reference$=row-406]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-407]:hover) [data-monster-insert-reference$=row-407]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-408]:hover) [data-monster-insert-reference$=row-408]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-409]:hover) [data-monster-insert-reference$=row-409]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-410]:hover) [data-monster-insert-reference$=row-410]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-411]:hover) [data-monster-insert-reference$=row-411]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-412]:hover) [data-monster-insert-reference$=row-412]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-413]:hover) [data-monster-insert-reference$=row-413]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-414]:hover) [data-monster-insert-reference$=row-414]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-415]:hover) [data-monster-insert-reference$=row-415]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-416]:hover) [data-monster-insert-reference$=row-416]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-417]:hover) [data-monster-insert-reference$=row-417]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-418]:hover) [data-monster-insert-reference$=row-418]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-419]:hover) [data-monster-insert-reference$=row-419]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-420]:hover) [data-monster-insert-reference$=row-420]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-421]:hover) [data-monster-insert-reference$=row-421]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-422]:hover) [data-monster-insert-reference$=row-422]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-423]:hover) [data-monster-insert-reference$=row-423]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-424]:hover) [data-monster-insert-reference$=row-424]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-425]:hover) [data-monster-insert-reference$=row-425]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-426]:hover) [data-monster-insert-reference$=row-426]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-427]:hover) [data-monster-insert-reference$=row-427]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-428]:hover) [data-monster-insert-reference$=row-428]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-429]:hover) [data-monster-insert-reference$=row-429]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-430]:hover) [data-monster-insert-reference$=row-430]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-431]:hover) [data-monster-insert-reference$=row-431]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-432]:hover) [data-monster-insert-reference$=row-432]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-433]:hover) [data-monster-insert-reference$=row-433]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-434]:hover) [data-monster-insert-reference$=row-434]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-435]:hover) [data-monster-insert-reference$=row-435]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-436]:hover) [data-monster-insert-reference$=row-436]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-437]:hover) [data-monster-insert-reference$=row-437]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-438]:hover) [data-monster-insert-reference$=row-438]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-439]:hover) [data-monster-insert-reference$=row-439]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-440]:hover) [data-monster-insert-reference$=row-440]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-441]:hover) [data-monster-insert-reference$=row-441]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-442]:hover) [data-monster-insert-reference$=row-442]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-443]:hover) [data-monster-insert-reference$=row-443]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-444]:hover) [data-monster-insert-reference$=row-444]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-445]:hover) [data-monster-insert-reference$=row-445]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-446]:hover) [data-monster-insert-reference$=row-446]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-447]:hover) [data-monster-insert-reference$=row-447]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-448]:hover) [data-monster-insert-reference$=row-448]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-449]:hover) [data-monster-insert-reference$=row-449]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-450]:hover) [data-monster-insert-reference$=row-450]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-451]:hover) [data-monster-insert-reference$=row-451]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-452]:hover) [data-monster-insert-reference$=row-452]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-453]:hover) [data-monster-insert-reference$=row-453]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-454]:hover) [data-monster-insert-reference$=row-454]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-455]:hover) [data-monster-insert-reference$=row-455]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-456]:hover) [data-monster-insert-reference$=row-456]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-457]:hover) [data-monster-insert-reference$=row-457]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-458]:hover) [data-monster-insert-reference$=row-458]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-459]:hover) [data-monster-insert-reference$=row-459]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-460]:hover) [data-monster-insert-reference$=row-460]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-461]:hover) [data-monster-insert-reference$=row-461]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-462]:hover) [data-monster-insert-reference$=row-462]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-463]:hover) [data-monster-insert-reference$=row-463]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-464]:hover) [data-monster-insert-reference$=row-464]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-465]:hover) [data-monster-insert-reference$=row-465]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-466]:hover) [data-monster-insert-reference$=row-466]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-467]:hover) [data-monster-insert-reference$=row-467]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-468]:hover) [data-monster-insert-reference$=row-468]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-469]:hover) [data-monster-insert-reference$=row-469]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-470]:hover) [data-monster-insert-reference$=row-470]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-471]:hover) [data-monster-insert-reference$=row-471]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-472]:hover) [data-monster-insert-reference$=row-472]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-473]:hover) [data-monster-insert-reference$=row-473]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-474]:hover) [data-monster-insert-reference$=row-474]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-475]:hover) [data-monster-insert-reference$=row-475]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-476]:hover) [data-monster-insert-reference$=row-476]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-477]:hover) [data-monster-insert-reference$=row-477]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-478]:hover) [data-monster-insert-reference$=row-478]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-479]:hover) [data-monster-insert-reference$=row-479]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-480]:hover) [data-monster-insert-reference$=row-480]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-481]:hover) [data-monster-insert-reference$=row-481]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-482]:hover) [data-monster-insert-reference$=row-482]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-483]:hover) [data-monster-insert-reference$=row-483]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-484]:hover) [data-monster-insert-reference$=row-484]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-485]:hover) [data-monster-insert-reference$=row-485]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-486]:hover) [data-monster-insert-reference$=row-486]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-487]:hover) [data-monster-insert-reference$=row-487]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-488]:hover) [data-monster-insert-reference$=row-488]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-489]:hover) [data-monster-insert-reference$=row-489]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-490]:hover) [data-monster-insert-reference$=row-490]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-491]:hover) [data-monster-insert-reference$=row-491]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-492]:hover) [data-monster-insert-reference$=row-492]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-493]:hover) [data-monster-insert-reference$=row-493]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-494]:hover) [data-monster-insert-reference$=row-494]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-495]:hover) [data-monster-insert-reference$=row-495]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-496]:hover) [data-monster-insert-reference$=row-496]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-497]:hover) [data-monster-insert-reference$=row-497]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-498]:hover) [data-monster-insert-reference$=row-498]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-499]:hover) [data-monster-insert-reference$=row-499]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable]:has([data-monster-insert-reference$=row-500]:hover) [data-monster-insert-reference$=row-500]{background-color:var(--monster-table-hover-bg-color);box-sizing:border-box;color:var(--monster-table-hover-color)}[data-monster-role=datatable] .monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}[data-monster-role=datatable] .monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}[data-monster-role=datatable] .monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}[data-monster-role=datatable] .monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}:is([data-monster-role=datatable] .monster-form) label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}[data-monster-role=datatable] .monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}[data-monster-role=datatable] .monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}:is([data-monster-role=datatable] .monster-form) label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}:is([data-monster-role=datatable] .monster-form) label~label{margin-top:1rem}:is([data-monster-role=datatable] .monster-form) label~fieldset{margin-top:1rem}[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}[data-monster-role=datatable] .monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}[data-monster-role=datatable] .monster-form option:checked,[data-monster-role=datatable] .monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=datatable] .monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input:not([type=radio]):not([type=checkbox]),[data-monster-role=datatable] .monster-form label,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{width:100%}[data-monster-role=datatable] .monster-form label input:not([type=radio]):not([type=checkbox]),[data-monster-role=datatable] .monster-form label select,[data-monster-role=datatable] .monster-form label textarea{margin-top:.2rem;width:100%}:is([data-monster-role=datatable] .monster-form) label+input:not([type=radio]):not([type=checkbox]),:is([data-monster-role=datatable] .monster-form) label+select,:is([data-monster-role=datatable] .monster-form) label+textarea{margin-top:.2rem;width:100%}[data-monster-role=datatable] .monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}[data-monster-role=datatable] .monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}:is([data-monster-role=datatable] .monster-form) fieldset~fieldset{margin-top:1rem}[data-monster-role=datatable] .monster-form button{margin:.2rem 0}[data-monster-role=datatable] .monster-form button:first-of-type{margin-top:1rem}[data-monster-role=datatable] .monster-form button:last-of-type{margin-bottom:1rem}[data-monster-role=datatable] .monster-form input:focus-visible{outline:none}[data-monster-role=datatable] .monster-form button:focus,[data-monster-role=datatable] .monster-form input:focus,[data-monster-role=datatable] .monster-form select:focus,[data-monster-role=datatable] .monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){[data-monster-role=datatable] .monster-form button,[data-monster-role=datatable] .monster-form input,[data-monster-role=datatable] .monster-form select,[data-monster-role=datatable] .monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}[data-monster-role=datatable] .monster-form button:focus,[data-monster-role=datatable] .monster-form input:focus,[data-monster-role=datatable] .monster-form select:focus,[data-monster-role=datatable] .monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}[data-monster-role=datatable] .monster-form button:hover,[data-monster-role=datatable] .monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),[data-monster-role=datatable] .monster-form select:hover,[data-monster-role=datatable] .monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=footer]{align-items:center;box-sizing:border-box;display:flex;padding:5px 20px}[data-monster-role=footer]>slot{display:flex;justify-content:flex-start;width:-moz-fit-content;width:fit-content}[data-monster-role=footer]>slot.hidden{display:none}[data-monster-role=datatable-headers]{display:grid}[data-monster-role=datatable-headers]>div{align-items:center;display:flex;font-size:1rem;font-weight:400;font-weight:700;justify-content:flex-start;line-height:1.6;max-width:100%;overflow:hidden;padding:.3rem .2rem;text-align:justify;text-overflow:ellipsis;white-space:nowrap}[data-monster-role=datatable-headers]>div a[data-monster-sortable]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M11.5 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L11 2.707V14.5a.5.5 0 0 0 .5.5m-7-14a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V1.5a.5.5 0 0 1 .5-.5'/%3E%3C/svg%3E\");margin:0 3px 0 5px}[data-monster-role=datatable-headers]>div a[data-monster-sortable~=DESC i]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5'/%3E%3C/svg%3E\")}[data-monster-role=datatable-headers]>div a[data-monster-sortable~=ASC i]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1'/%3E%3C/svg%3E\")}[data-monster-role=datatable-headers] .flex-start{justify-content:flex-start}[data-monster-role=datatable-headers] .flex-end{justify-content:flex-end}[data-monster-role=datatable-headers] .flex-center{justify-content:center}.filter{margin:0 0 20px}.hidden{display:none}monster-state[data-monster-role=empty-without-action]::part(action){display:none}.empty-state-container{padding:var(--monster-space-7) 0}@media (max-width:768px){[data-monster-role=table-container] .bar{align-items:flex-end;display:flex;flex-direction:column-reverse;gap:.1rem}[data-monster-role=table-container]:has([data-monster-insert-reference=row-0]:hover) [data-monster-insert-reference=row-0]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-1]:hover) [data-monster-insert-reference=row-1]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-2]:hover) [data-monster-insert-reference=row-2]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-3]:hover) [data-monster-insert-reference=row-3]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-4]:hover) [data-monster-insert-reference=row-4]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-5]:hover) [data-monster-insert-reference=row-5]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-6]:hover) [data-monster-insert-reference=row-6]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-7]:hover) [data-monster-insert-reference=row-7]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-8]:hover) [data-monster-insert-reference=row-8]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-9]:hover) [data-monster-insert-reference=row-9]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-10]:hover) [data-monster-insert-reference=row-10]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-11]:hover) [data-monster-insert-reference=row-11]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-12]:hover) [data-monster-insert-reference=row-12]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-13]:hover) [data-monster-insert-reference=row-13]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-14]:hover) [data-monster-insert-reference=row-14]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-15]:hover) [data-monster-insert-reference=row-15]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-16]:hover) [data-monster-insert-reference=row-16]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-17]:hover) [data-monster-insert-reference=row-17]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-18]:hover) [data-monster-insert-reference=row-18]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-19]:hover) [data-monster-insert-reference=row-19]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-20]:hover) [data-monster-insert-reference=row-20]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-21]:hover) [data-monster-insert-reference=row-21]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-22]:hover) [data-monster-insert-reference=row-22]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-23]:hover) [data-monster-insert-reference=row-23]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-24]:hover) [data-monster-insert-reference=row-24]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-25]:hover) [data-monster-insert-reference=row-25]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-26]:hover) [data-monster-insert-reference=row-26]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-27]:hover) [data-monster-insert-reference=row-27]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-28]:hover) [data-monster-insert-reference=row-28]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-29]:hover) [data-monster-insert-reference=row-29]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-30]:hover) [data-monster-insert-reference=row-30]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-31]:hover) [data-monster-insert-reference=row-31]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-32]:hover) [data-monster-insert-reference=row-32]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-33]:hover) [data-monster-insert-reference=row-33]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-34]:hover) [data-monster-insert-reference=row-34]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-35]:hover) [data-monster-insert-reference=row-35]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-36]:hover) [data-monster-insert-reference=row-36]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-37]:hover) [data-monster-insert-reference=row-37]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-38]:hover) [data-monster-insert-reference=row-38]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-39]:hover) [data-monster-insert-reference=row-39]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-40]:hover) [data-monster-insert-reference=row-40]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-41]:hover) [data-monster-insert-reference=row-41]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-42]:hover) [data-monster-insert-reference=row-42]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-43]:hover) [data-monster-insert-reference=row-43]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-44]:hover) [data-monster-insert-reference=row-44]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-45]:hover) [data-monster-insert-reference=row-45]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-46]:hover) [data-monster-insert-reference=row-46]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-47]:hover) [data-monster-insert-reference=row-47]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-48]:hover) [data-monster-insert-reference=row-48]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-49]:hover) [data-monster-insert-reference=row-49]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-50]:hover) [data-monster-insert-reference=row-50]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-51]:hover) [data-monster-insert-reference=row-51]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-52]:hover) [data-monster-insert-reference=row-52]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-53]:hover) [data-monster-insert-reference=row-53]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-54]:hover) [data-monster-insert-reference=row-54]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-55]:hover) [data-monster-insert-reference=row-55]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-56]:hover) [data-monster-insert-reference=row-56]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-57]:hover) [data-monster-insert-reference=row-57]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-58]:hover) [data-monster-insert-reference=row-58]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-59]:hover) [data-monster-insert-reference=row-59]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-60]:hover) [data-monster-insert-reference=row-60]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-61]:hover) [data-monster-insert-reference=row-61]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-62]:hover) [data-monster-insert-reference=row-62]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-63]:hover) [data-monster-insert-reference=row-63]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-64]:hover) [data-monster-insert-reference=row-64]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-65]:hover) [data-monster-insert-reference=row-65]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-66]:hover) [data-monster-insert-reference=row-66]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-67]:hover) [data-monster-insert-reference=row-67]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-68]:hover) [data-monster-insert-reference=row-68]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-69]:hover) [data-monster-insert-reference=row-69]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-70]:hover) [data-monster-insert-reference=row-70]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-71]:hover) [data-monster-insert-reference=row-71]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-72]:hover) [data-monster-insert-reference=row-72]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-73]:hover) [data-monster-insert-reference=row-73]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-74]:hover) [data-monster-insert-reference=row-74]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-75]:hover) [data-monster-insert-reference=row-75]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-76]:hover) [data-monster-insert-reference=row-76]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-77]:hover) [data-monster-insert-reference=row-77]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-78]:hover) [data-monster-insert-reference=row-78]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-79]:hover) [data-monster-insert-reference=row-79]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-80]:hover) [data-monster-insert-reference=row-80]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-81]:hover) [data-monster-insert-reference=row-81]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-82]:hover) [data-monster-insert-reference=row-82]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-83]:hover) [data-monster-insert-reference=row-83]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-84]:hover) [data-monster-insert-reference=row-84]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-85]:hover) [data-monster-insert-reference=row-85]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-86]:hover) [data-monster-insert-reference=row-86]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-87]:hover) [data-monster-insert-reference=row-87]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-88]:hover) [data-monster-insert-reference=row-88]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-89]:hover) [data-monster-insert-reference=row-89]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-90]:hover) [data-monster-insert-reference=row-90]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-91]:hover) [data-monster-insert-reference=row-91]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-92]:hover) [data-monster-insert-reference=row-92]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-93]:hover) [data-monster-insert-reference=row-93]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-94]:hover) [data-monster-insert-reference=row-94]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-95]:hover) [data-monster-insert-reference=row-95]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-96]:hover) [data-monster-insert-reference=row-96]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-97]:hover) [data-monster-insert-reference=row-97]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-98]:hover) [data-monster-insert-reference=row-98]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-99]:hover) [data-monster-insert-reference=row-99]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-100]:hover) [data-monster-insert-reference=row-100]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-101]:hover) [data-monster-insert-reference=row-101]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-102]:hover) [data-monster-insert-reference=row-102]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-103]:hover) [data-monster-insert-reference=row-103]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-104]:hover) [data-monster-insert-reference=row-104]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-105]:hover) [data-monster-insert-reference=row-105]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-106]:hover) [data-monster-insert-reference=row-106]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-107]:hover) [data-monster-insert-reference=row-107]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-108]:hover) [data-monster-insert-reference=row-108]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-109]:hover) [data-monster-insert-reference=row-109]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-110]:hover) [data-monster-insert-reference=row-110]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-111]:hover) [data-monster-insert-reference=row-111]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-112]:hover) [data-monster-insert-reference=row-112]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-113]:hover) [data-monster-insert-reference=row-113]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-114]:hover) [data-monster-insert-reference=row-114]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-115]:hover) [data-monster-insert-reference=row-115]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-116]:hover) [data-monster-insert-reference=row-116]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-117]:hover) [data-monster-insert-reference=row-117]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-118]:hover) [data-monster-insert-reference=row-118]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-119]:hover) [data-monster-insert-reference=row-119]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-120]:hover) [data-monster-insert-reference=row-120]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-121]:hover) [data-monster-insert-reference=row-121]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-122]:hover) [data-monster-insert-reference=row-122]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-123]:hover) [data-monster-insert-reference=row-123]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-124]:hover) [data-monster-insert-reference=row-124]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-125]:hover) [data-monster-insert-reference=row-125]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-126]:hover) [data-monster-insert-reference=row-126]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-127]:hover) [data-monster-insert-reference=row-127]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-128]:hover) [data-monster-insert-reference=row-128]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-129]:hover) [data-monster-insert-reference=row-129]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-130]:hover) [data-monster-insert-reference=row-130]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-131]:hover) [data-monster-insert-reference=row-131]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-132]:hover) [data-monster-insert-reference=row-132]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-133]:hover) [data-monster-insert-reference=row-133]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-134]:hover) [data-monster-insert-reference=row-134]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-135]:hover) [data-monster-insert-reference=row-135]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-136]:hover) [data-monster-insert-reference=row-136]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-137]:hover) [data-monster-insert-reference=row-137]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-138]:hover) [data-monster-insert-reference=row-138]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-139]:hover) [data-monster-insert-reference=row-139]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-140]:hover) [data-monster-insert-reference=row-140]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-141]:hover) [data-monster-insert-reference=row-141]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-142]:hover) [data-monster-insert-reference=row-142]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-143]:hover) [data-monster-insert-reference=row-143]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-144]:hover) [data-monster-insert-reference=row-144]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-145]:hover) [data-monster-insert-reference=row-145]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-146]:hover) [data-monster-insert-reference=row-146]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-147]:hover) [data-monster-insert-reference=row-147]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-148]:hover) [data-monster-insert-reference=row-148]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-149]:hover) [data-monster-insert-reference=row-149]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-150]:hover) [data-monster-insert-reference=row-150]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-151]:hover) [data-monster-insert-reference=row-151]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-152]:hover) [data-monster-insert-reference=row-152]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-153]:hover) [data-monster-insert-reference=row-153]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-154]:hover) [data-monster-insert-reference=row-154]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-155]:hover) [data-monster-insert-reference=row-155]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-156]:hover) [data-monster-insert-reference=row-156]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-157]:hover) [data-monster-insert-reference=row-157]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-158]:hover) [data-monster-insert-reference=row-158]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-159]:hover) [data-monster-insert-reference=row-159]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-160]:hover) [data-monster-insert-reference=row-160]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-161]:hover) [data-monster-insert-reference=row-161]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-162]:hover) [data-monster-insert-reference=row-162]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-163]:hover) [data-monster-insert-reference=row-163]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-164]:hover) [data-monster-insert-reference=row-164]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-165]:hover) [data-monster-insert-reference=row-165]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-166]:hover) [data-monster-insert-reference=row-166]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-167]:hover) [data-monster-insert-reference=row-167]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-168]:hover) [data-monster-insert-reference=row-168]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-169]:hover) [data-monster-insert-reference=row-169]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-170]:hover) [data-monster-insert-reference=row-170]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-171]:hover) [data-monster-insert-reference=row-171]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-172]:hover) [data-monster-insert-reference=row-172]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-173]:hover) [data-monster-insert-reference=row-173]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-174]:hover) [data-monster-insert-reference=row-174]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-175]:hover) [data-monster-insert-reference=row-175]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-176]:hover) [data-monster-insert-reference=row-176]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-177]:hover) [data-monster-insert-reference=row-177]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-178]:hover) [data-monster-insert-reference=row-178]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-179]:hover) [data-monster-insert-reference=row-179]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-180]:hover) [data-monster-insert-reference=row-180]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-181]:hover) [data-monster-insert-reference=row-181]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-182]:hover) [data-monster-insert-reference=row-182]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-183]:hover) [data-monster-insert-reference=row-183]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-184]:hover) [data-monster-insert-reference=row-184]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-185]:hover) [data-monster-insert-reference=row-185]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-186]:hover) [data-monster-insert-reference=row-186]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-187]:hover) [data-monster-insert-reference=row-187]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-188]:hover) [data-monster-insert-reference=row-188]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-189]:hover) [data-monster-insert-reference=row-189]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-190]:hover) [data-monster-insert-reference=row-190]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-191]:hover) [data-monster-insert-reference=row-191]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-192]:hover) [data-monster-insert-reference=row-192]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-193]:hover) [data-monster-insert-reference=row-193]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-194]:hover) [data-monster-insert-reference=row-194]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-195]:hover) [data-monster-insert-reference=row-195]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-196]:hover) [data-monster-insert-reference=row-196]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-197]:hover) [data-monster-insert-reference=row-197]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-198]:hover) [data-monster-insert-reference=row-198]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-199]:hover) [data-monster-insert-reference=row-199]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-200]:hover) [data-monster-insert-reference=row-200]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-201]:hover) [data-monster-insert-reference=row-201]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-202]:hover) [data-monster-insert-reference=row-202]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-203]:hover) [data-monster-insert-reference=row-203]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-204]:hover) [data-monster-insert-reference=row-204]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-205]:hover) [data-monster-insert-reference=row-205]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-206]:hover) [data-monster-insert-reference=row-206]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-207]:hover) [data-monster-insert-reference=row-207]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-208]:hover) [data-monster-insert-reference=row-208]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-209]:hover) [data-monster-insert-reference=row-209]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-210]:hover) [data-monster-insert-reference=row-210]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-211]:hover) [data-monster-insert-reference=row-211]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-212]:hover) [data-monster-insert-reference=row-212]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-213]:hover) [data-monster-insert-reference=row-213]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-214]:hover) [data-monster-insert-reference=row-214]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-215]:hover) [data-monster-insert-reference=row-215]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-216]:hover) [data-monster-insert-reference=row-216]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-217]:hover) [data-monster-insert-reference=row-217]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-218]:hover) [data-monster-insert-reference=row-218]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-219]:hover) [data-monster-insert-reference=row-219]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-220]:hover) [data-monster-insert-reference=row-220]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-221]:hover) [data-monster-insert-reference=row-221]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-222]:hover) [data-monster-insert-reference=row-222]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-223]:hover) [data-monster-insert-reference=row-223]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-224]:hover) [data-monster-insert-reference=row-224]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-225]:hover) [data-monster-insert-reference=row-225]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-226]:hover) [data-monster-insert-reference=row-226]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-227]:hover) [data-monster-insert-reference=row-227]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-228]:hover) [data-monster-insert-reference=row-228]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-229]:hover) [data-monster-insert-reference=row-229]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-230]:hover) [data-monster-insert-reference=row-230]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-231]:hover) [data-monster-insert-reference=row-231]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-232]:hover) [data-monster-insert-reference=row-232]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-233]:hover) [data-monster-insert-reference=row-233]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-234]:hover) [data-monster-insert-reference=row-234]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-235]:hover) [data-monster-insert-reference=row-235]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-236]:hover) [data-monster-insert-reference=row-236]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-237]:hover) [data-monster-insert-reference=row-237]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-238]:hover) [data-monster-insert-reference=row-238]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-239]:hover) [data-monster-insert-reference=row-239]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-240]:hover) [data-monster-insert-reference=row-240]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-241]:hover) [data-monster-insert-reference=row-241]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-242]:hover) [data-monster-insert-reference=row-242]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-243]:hover) [data-monster-insert-reference=row-243]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-244]:hover) [data-monster-insert-reference=row-244]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-245]:hover) [data-monster-insert-reference=row-245]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-246]:hover) [data-monster-insert-reference=row-246]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-247]:hover) [data-monster-insert-reference=row-247]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-248]:hover) [data-monster-insert-reference=row-248]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-249]:hover) [data-monster-insert-reference=row-249]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-250]:hover) [data-monster-insert-reference=row-250]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-251]:hover) [data-monster-insert-reference=row-251]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-252]:hover) [data-monster-insert-reference=row-252]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-253]:hover) [data-monster-insert-reference=row-253]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-254]:hover) [data-monster-insert-reference=row-254]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-255]:hover) [data-monster-insert-reference=row-255]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-256]:hover) [data-monster-insert-reference=row-256]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-257]:hover) [data-monster-insert-reference=row-257]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-258]:hover) [data-monster-insert-reference=row-258]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-259]:hover) [data-monster-insert-reference=row-259]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-260]:hover) [data-monster-insert-reference=row-260]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-261]:hover) [data-monster-insert-reference=row-261]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-262]:hover) [data-monster-insert-reference=row-262]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-263]:hover) [data-monster-insert-reference=row-263]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-264]:hover) [data-monster-insert-reference=row-264]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-265]:hover) [data-monster-insert-reference=row-265]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-266]:hover) [data-monster-insert-reference=row-266]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-267]:hover) [data-monster-insert-reference=row-267]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-268]:hover) [data-monster-insert-reference=row-268]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-269]:hover) [data-monster-insert-reference=row-269]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-270]:hover) [data-monster-insert-reference=row-270]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-271]:hover) [data-monster-insert-reference=row-271]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-272]:hover) [data-monster-insert-reference=row-272]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-273]:hover) [data-monster-insert-reference=row-273]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-274]:hover) [data-monster-insert-reference=row-274]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-275]:hover) [data-monster-insert-reference=row-275]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-276]:hover) [data-monster-insert-reference=row-276]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-277]:hover) [data-monster-insert-reference=row-277]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-278]:hover) [data-monster-insert-reference=row-278]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-279]:hover) [data-monster-insert-reference=row-279]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-280]:hover) [data-monster-insert-reference=row-280]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-281]:hover) [data-monster-insert-reference=row-281]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-282]:hover) [data-monster-insert-reference=row-282]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-283]:hover) [data-monster-insert-reference=row-283]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-284]:hover) [data-monster-insert-reference=row-284]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-285]:hover) [data-monster-insert-reference=row-285]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-286]:hover) [data-monster-insert-reference=row-286]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-287]:hover) [data-monster-insert-reference=row-287]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-288]:hover) [data-monster-insert-reference=row-288]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-289]:hover) [data-monster-insert-reference=row-289]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-290]:hover) [data-monster-insert-reference=row-290]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-291]:hover) [data-monster-insert-reference=row-291]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-292]:hover) [data-monster-insert-reference=row-292]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-293]:hover) [data-monster-insert-reference=row-293]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-294]:hover) [data-monster-insert-reference=row-294]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-295]:hover) [data-monster-insert-reference=row-295]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-296]:hover) [data-monster-insert-reference=row-296]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-297]:hover) [data-monster-insert-reference=row-297]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-298]:hover) [data-monster-insert-reference=row-298]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-299]:hover) [data-monster-insert-reference=row-299]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-300]:hover) [data-monster-insert-reference=row-300]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-301]:hover) [data-monster-insert-reference=row-301]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-302]:hover) [data-monster-insert-reference=row-302]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-303]:hover) [data-monster-insert-reference=row-303]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-304]:hover) [data-monster-insert-reference=row-304]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-305]:hover) [data-monster-insert-reference=row-305]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-306]:hover) [data-monster-insert-reference=row-306]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-307]:hover) [data-monster-insert-reference=row-307]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-308]:hover) [data-monster-insert-reference=row-308]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-309]:hover) [data-monster-insert-reference=row-309]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-310]:hover) [data-monster-insert-reference=row-310]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-311]:hover) [data-monster-insert-reference=row-311]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-312]:hover) [data-monster-insert-reference=row-312]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-313]:hover) [data-monster-insert-reference=row-313]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-314]:hover) [data-monster-insert-reference=row-314]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-315]:hover) [data-monster-insert-reference=row-315]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-316]:hover) [data-monster-insert-reference=row-316]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-317]:hover) [data-monster-insert-reference=row-317]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-318]:hover) [data-monster-insert-reference=row-318]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-319]:hover) [data-monster-insert-reference=row-319]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-320]:hover) [data-monster-insert-reference=row-320]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-321]:hover) [data-monster-insert-reference=row-321]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-322]:hover) [data-monster-insert-reference=row-322]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-323]:hover) [data-monster-insert-reference=row-323]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-324]:hover) [data-monster-insert-reference=row-324]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-325]:hover) [data-monster-insert-reference=row-325]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-326]:hover) [data-monster-insert-reference=row-326]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-327]:hover) [data-monster-insert-reference=row-327]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-328]:hover) [data-monster-insert-reference=row-328]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-329]:hover) [data-monster-insert-reference=row-329]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-330]:hover) [data-monster-insert-reference=row-330]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-331]:hover) [data-monster-insert-reference=row-331]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-332]:hover) [data-monster-insert-reference=row-332]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-333]:hover) [data-monster-insert-reference=row-333]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-334]:hover) [data-monster-insert-reference=row-334]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-335]:hover) [data-monster-insert-reference=row-335]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-336]:hover) [data-monster-insert-reference=row-336]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-337]:hover) [data-monster-insert-reference=row-337]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-338]:hover) [data-monster-insert-reference=row-338]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-339]:hover) [data-monster-insert-reference=row-339]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-340]:hover) [data-monster-insert-reference=row-340]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-341]:hover) [data-monster-insert-reference=row-341]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-342]:hover) [data-monster-insert-reference=row-342]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-343]:hover) [data-monster-insert-reference=row-343]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-344]:hover) [data-monster-insert-reference=row-344]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-345]:hover) [data-monster-insert-reference=row-345]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-346]:hover) [data-monster-insert-reference=row-346]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-347]:hover) [data-monster-insert-reference=row-347]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-348]:hover) [data-monster-insert-reference=row-348]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-349]:hover) [data-monster-insert-reference=row-349]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-350]:hover) [data-monster-insert-reference=row-350]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-351]:hover) [data-monster-insert-reference=row-351]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-352]:hover) [data-monster-insert-reference=row-352]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-353]:hover) [data-monster-insert-reference=row-353]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-354]:hover) [data-monster-insert-reference=row-354]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-355]:hover) [data-monster-insert-reference=row-355]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-356]:hover) [data-monster-insert-reference=row-356]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-357]:hover) [data-monster-insert-reference=row-357]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-358]:hover) [data-monster-insert-reference=row-358]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-359]:hover) [data-monster-insert-reference=row-359]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-360]:hover) [data-monster-insert-reference=row-360]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-361]:hover) [data-monster-insert-reference=row-361]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-362]:hover) [data-monster-insert-reference=row-362]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-363]:hover) [data-monster-insert-reference=row-363]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-364]:hover) [data-monster-insert-reference=row-364]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-365]:hover) [data-monster-insert-reference=row-365]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-366]:hover) [data-monster-insert-reference=row-366]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-367]:hover) [data-monster-insert-reference=row-367]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-368]:hover) [data-monster-insert-reference=row-368]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-369]:hover) [data-monster-insert-reference=row-369]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-370]:hover) [data-monster-insert-reference=row-370]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-371]:hover) [data-monster-insert-reference=row-371]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-372]:hover) [data-monster-insert-reference=row-372]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-373]:hover) [data-monster-insert-reference=row-373]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-374]:hover) [data-monster-insert-reference=row-374]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-375]:hover) [data-monster-insert-reference=row-375]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-376]:hover) [data-monster-insert-reference=row-376]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-377]:hover) [data-monster-insert-reference=row-377]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-378]:hover) [data-monster-insert-reference=row-378]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-379]:hover) [data-monster-insert-reference=row-379]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-380]:hover) [data-monster-insert-reference=row-380]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-381]:hover) [data-monster-insert-reference=row-381]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-382]:hover) [data-monster-insert-reference=row-382]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-383]:hover) [data-monster-insert-reference=row-383]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-384]:hover) [data-monster-insert-reference=row-384]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-385]:hover) [data-monster-insert-reference=row-385]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-386]:hover) [data-monster-insert-reference=row-386]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-387]:hover) [data-monster-insert-reference=row-387]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-388]:hover) [data-monster-insert-reference=row-388]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-389]:hover) [data-monster-insert-reference=row-389]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-390]:hover) [data-monster-insert-reference=row-390]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-391]:hover) [data-monster-insert-reference=row-391]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-392]:hover) [data-monster-insert-reference=row-392]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-393]:hover) [data-monster-insert-reference=row-393]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-394]:hover) [data-monster-insert-reference=row-394]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-395]:hover) [data-monster-insert-reference=row-395]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-396]:hover) [data-monster-insert-reference=row-396]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-397]:hover) [data-monster-insert-reference=row-397]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-398]:hover) [data-monster-insert-reference=row-398]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-399]:hover) [data-monster-insert-reference=row-399]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-400]:hover) [data-monster-insert-reference=row-400]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-401]:hover) [data-monster-insert-reference=row-401]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-402]:hover) [data-monster-insert-reference=row-402]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-403]:hover) [data-monster-insert-reference=row-403]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-404]:hover) [data-monster-insert-reference=row-404]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-405]:hover) [data-monster-insert-reference=row-405]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-406]:hover) [data-monster-insert-reference=row-406]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-407]:hover) [data-monster-insert-reference=row-407]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-408]:hover) [data-monster-insert-reference=row-408]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-409]:hover) [data-monster-insert-reference=row-409]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-410]:hover) [data-monster-insert-reference=row-410]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-411]:hover) [data-monster-insert-reference=row-411]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-412]:hover) [data-monster-insert-reference=row-412]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-413]:hover) [data-monster-insert-reference=row-413]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-414]:hover) [data-monster-insert-reference=row-414]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-415]:hover) [data-monster-insert-reference=row-415]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-416]:hover) [data-monster-insert-reference=row-416]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-417]:hover) [data-monster-insert-reference=row-417]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-418]:hover) [data-monster-insert-reference=row-418]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-419]:hover) [data-monster-insert-reference=row-419]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-420]:hover) [data-monster-insert-reference=row-420]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-421]:hover) [data-monster-insert-reference=row-421]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-422]:hover) [data-monster-insert-reference=row-422]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-423]:hover) [data-monster-insert-reference=row-423]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-424]:hover) [data-monster-insert-reference=row-424]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-425]:hover) [data-monster-insert-reference=row-425]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-426]:hover) [data-monster-insert-reference=row-426]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-427]:hover) [data-monster-insert-reference=row-427]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-428]:hover) [data-monster-insert-reference=row-428]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-429]:hover) [data-monster-insert-reference=row-429]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-430]:hover) [data-monster-insert-reference=row-430]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-431]:hover) [data-monster-insert-reference=row-431]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-432]:hover) [data-monster-insert-reference=row-432]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-433]:hover) [data-monster-insert-reference=row-433]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-434]:hover) [data-monster-insert-reference=row-434]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-435]:hover) [data-monster-insert-reference=row-435]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-436]:hover) [data-monster-insert-reference=row-436]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-437]:hover) [data-monster-insert-reference=row-437]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-438]:hover) [data-monster-insert-reference=row-438]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-439]:hover) [data-monster-insert-reference=row-439]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-440]:hover) [data-monster-insert-reference=row-440]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-441]:hover) [data-monster-insert-reference=row-441]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-442]:hover) [data-monster-insert-reference=row-442]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-443]:hover) [data-monster-insert-reference=row-443]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-444]:hover) [data-monster-insert-reference=row-444]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-445]:hover) [data-monster-insert-reference=row-445]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-446]:hover) [data-monster-insert-reference=row-446]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-447]:hover) [data-monster-insert-reference=row-447]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-448]:hover) [data-monster-insert-reference=row-448]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-449]:hover) [data-monster-insert-reference=row-449]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-450]:hover) [data-monster-insert-reference=row-450]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-451]:hover) [data-monster-insert-reference=row-451]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-452]:hover) [data-monster-insert-reference=row-452]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-453]:hover) [data-monster-insert-reference=row-453]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-454]:hover) [data-monster-insert-reference=row-454]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-455]:hover) [data-monster-insert-reference=row-455]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-456]:hover) [data-monster-insert-reference=row-456]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-457]:hover) [data-monster-insert-reference=row-457]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-458]:hover) [data-monster-insert-reference=row-458]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-459]:hover) [data-monster-insert-reference=row-459]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-460]:hover) [data-monster-insert-reference=row-460]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-461]:hover) [data-monster-insert-reference=row-461]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-462]:hover) [data-monster-insert-reference=row-462]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-463]:hover) [data-monster-insert-reference=row-463]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-464]:hover) [data-monster-insert-reference=row-464]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-465]:hover) [data-monster-insert-reference=row-465]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-466]:hover) [data-monster-insert-reference=row-466]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-467]:hover) [data-monster-insert-reference=row-467]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-468]:hover) [data-monster-insert-reference=row-468]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-469]:hover) [data-monster-insert-reference=row-469]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-470]:hover) [data-monster-insert-reference=row-470]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-471]:hover) [data-monster-insert-reference=row-471]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-472]:hover) [data-monster-insert-reference=row-472]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-473]:hover) [data-monster-insert-reference=row-473]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-474]:hover) [data-monster-insert-reference=row-474]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-475]:hover) [data-monster-insert-reference=row-475]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-476]:hover) [data-monster-insert-reference=row-476]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-477]:hover) [data-monster-insert-reference=row-477]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-478]:hover) [data-monster-insert-reference=row-478]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-479]:hover) [data-monster-insert-reference=row-479]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-480]:hover) [data-monster-insert-reference=row-480]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-481]:hover) [data-monster-insert-reference=row-481]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-482]:hover) [data-monster-insert-reference=row-482]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-483]:hover) [data-monster-insert-reference=row-483]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-484]:hover) [data-monster-insert-reference=row-484]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-485]:hover) [data-monster-insert-reference=row-485]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-486]:hover) [data-monster-insert-reference=row-486]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-487]:hover) [data-monster-insert-reference=row-487]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-488]:hover) [data-monster-insert-reference=row-488]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-489]:hover) [data-monster-insert-reference=row-489]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-490]:hover) [data-monster-insert-reference=row-490]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-491]:hover) [data-monster-insert-reference=row-491]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-492]:hover) [data-monster-insert-reference=row-492]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-493]:hover) [data-monster-insert-reference=row-493]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-494]:hover) [data-monster-insert-reference=row-494]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-495]:hover) [data-monster-insert-reference=row-495]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-496]:hover) [data-monster-insert-reference=row-496]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-497]:hover) [data-monster-insert-reference=row-497]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-498]:hover) [data-monster-insert-reference=row-498]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-499]:hover) [data-monster-insert-reference=row-499]{box-sizing:border-box}[data-monster-role=table-container]:has([data-monster-insert-reference=row-500]:hover) [data-monster-insert-reference=row-500]{box-sizing:border-box}::slotted(.monster-button-group){display:flex;flex-direction:column!important}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/embedded-pagination.mjs b/source/components/datatable/stylesheet/embedded-pagination.mjs index db5f136c19ea8796026c63751dd24818a47aaf5e..6a633c5e7ef354f876511a47c37db55fe0e9d0a8 100644 --- a/source/components/datatable/stylesheet/embedded-pagination.mjs +++ b/source/components/datatable/stylesheet/embedded-pagination.mjs @@ -20,7 +20,7 @@ const EmbeddedPaginationStyleSheet = new CSSStyleSheet(); try { EmbeddedPaginationStyleSheet.insertRule(` @layer embeddedpagination { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=pagination]{box-sizing:border-box;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.6;text-align:justify}[data-monster-role=pagination] ul{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;list-style:none;margin:20px 0;padding-left:0}[data-monster-role=pagination] ul li{border-left:1px solid #000;margin:0;padding:0 10px}[data-monster-role=pagination] ul li a,[data-monster-role=pagination] ul li a:active,[data-monster-role=pagination] ul li a:focus,[data-monster-role=pagination] ul li a:hover,[data-monster-role=pagination] ul li a:link,[data-monster-role=pagination] ul li a:visited{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);outline:none;padding:0 .4rem;text-decoration:none;width:-moz-max-content;width:max-content}[data-monster-role=pagination] ul li a:active,[data-monster-role=pagination] ul li a:focus,[data-monster-role=pagination] ul li a:hover{outline:none}[data-monster-role=pagination] ul li a:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){[data-monster-role=pagination] ul li a:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=pagination] ul li a.current{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3);cursor:unset}[data-monster-role=pagination] ul li a.disabled{cursor:not-allowed}[data-monster-role=pagination] ul li:first-child{border-left:none}@media (max-width:768px){[data-monster-role=pagination] ul li{padding:0 2px}[data-monster-role=pagination] ul li:first-child,[data-monster-role=pagination] ul li:nth-child(2){display:none}[data-monster-role=pagination] ul li:nth-child(3){border-left:none}} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}[data-monster-role=pagination]{box-sizing:border-box;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.6;text-align:justify}[data-monster-role=pagination] ul{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;list-style:none;margin:20px 0;padding-left:0}[data-monster-role=pagination] ul li{border-left:1px solid #000;margin:0;padding:0 10px}[data-monster-role=pagination] ul li a,[data-monster-role=pagination] ul li a:active,[data-monster-role=pagination] ul li a:focus,[data-monster-role=pagination] ul li a:hover,[data-monster-role=pagination] ul li a:link,[data-monster-role=pagination] ul li a:visited{background-color:var(--monster-table-bg-color);color:var(--monster-table-color);outline:none;padding:0 .4rem;text-decoration:none;width:-moz-max-content;width:max-content}[data-monster-role=pagination] ul li a:active,[data-monster-role=pagination] ul li a:focus,[data-monster-role=pagination] ul li a:hover{outline:none}[data-monster-role=pagination] ul li a:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){[data-monster-role=pagination] ul li a:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=pagination] ul li a.current{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3);cursor:unset}[data-monster-role=pagination] ul li a.disabled{cursor:not-allowed}[data-monster-role=pagination] ul li:first-child{border-left:none}@media (max-width:768px){[data-monster-role=pagination] ul li{padding:0 2px}[data-monster-role=pagination] ul li:first-child,[data-monster-role=pagination] ul li:nth-child(2){display:none}[data-monster-role=pagination] ul li:nth-child(3){border-left:none}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/filter.mjs b/source/components/datatable/stylesheet/filter.mjs index 13b54ca117d0a9ad1c979090458e882583960a39..cf845f597aaf95f838321cde544936335571508b 100644 --- a/source/components/datatable/stylesheet/filter.mjs +++ b/source/components/datatable/stylesheet/filter.mjs @@ -20,7 +20,7 @@ const FilterStyleSheet = new CSSStyleSheet(); try { FilterStyleSheet.insertRule(` @layer filter { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}:host{width:100%}[data-monster-role=control] .hidden{display:none}[data-monster-role=control] [data-monster-role=query]{height:100%;width:100%}[data-monster-role=control] [data-monster-role=layout]{align-items:flex-end;display:flex;flex-direction:column;justify-content:flex-start;width:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=remove-badges]{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter]{align-items:stretch;-moz-column-gap:1rem;column-gap:1rem;display:flex;flex-wrap:wrap;justify-content:flex-start;row-gap:.5rem;width:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter] ::slotted(label){align-items:stretch;border-bottom:var(--monster-border-width) solid var(--monster-border-color);display:flex;flex-direction:column;gap:.1rem;min-width:15em;padding:2px}[data-monster-role=control] [data-monster-role=layout] [name=hidden]{display:none}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search]{align-items:stretch;-moz-column-gap:.5rem;column-gap:.5rem;display:flex;flex-flow:row-reverse nowrap;margin-top:1rem;place-content:center flex-end;row-gap:1.5rem}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-button{display:flex}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(control){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(button-button){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(button-control){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-select{min-width:350px}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] [data-monster-visible=false]{display:none}@media (max-width:1200px){[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search]{-moz-column-gap:0;column-gap:0;flex-flow:column nowrap;row-gap:.5rem}}@media (max-width:768px){[data-monster-role=control] [data-monster-role=layout]{-moz-column-gap:0;column-gap:0;flex-flow:column nowrap;row-gap:.5rem}[data-monster-role=control] [data-monster-role=layout] monster-select{width:100%}}@media (max-width:480px){[data-monster-role=control] [data-monster-role=layout]{-moz-column-gap:0;column-gap:0;display:contents;flex-flow:column nowrap;row-gap:.5rem}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter]{display:contents}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter] ::slotted(label){min-width:-moz-fit-content;min-width:fit-content}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-select{min-width:-moz-fit-content;min-width:fit-content;width:100%}} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}:host{width:100%}[data-monster-role=control] .hidden{display:none}[data-monster-role=control] [data-monster-role=query]{height:100%;width:100%}[data-monster-role=control] [data-monster-role=layout]{align-items:flex-end;display:flex;flex-direction:column;justify-content:flex-start;width:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=remove-badges]{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter]{align-items:stretch;-moz-column-gap:1rem;column-gap:1rem;display:flex;flex-wrap:wrap;justify-content:flex-start;row-gap:.5rem;width:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter] ::slotted(label){align-items:stretch;border-bottom:var(--monster-border-width) solid var(--monster-table-border-color);display:flex;flex-direction:column;gap:.1rem;min-width:15em;padding:2px}[data-monster-role=control] [data-monster-role=layout] [name=hidden]{display:none}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search]{align-items:stretch;-moz-column-gap:.5rem;column-gap:.5rem;display:flex;flex-flow:row-reverse nowrap;margin-top:1rem;place-content:center flex-end;row-gap:1.5rem}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-button{display:flex}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(control){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(button-button){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] .stretched-control ::part(button-control){height:100%}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-select{min-width:350px}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] [data-monster-visible=false]{display:none}@media (max-width:1200px){[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search]{-moz-column-gap:0;column-gap:0;flex-flow:column nowrap;row-gap:.5rem}}@media (max-width:768px){[data-monster-role=control] [data-monster-role=layout]{-moz-column-gap:0;column-gap:0;flex-flow:column nowrap;row-gap:.5rem}[data-monster-role=control] [data-monster-role=layout] monster-select{width:100%}}@media (max-width:480px){[data-monster-role=control] [data-monster-role=layout]{-moz-column-gap:0;column-gap:0;display:contents;flex-flow:column nowrap;row-gap:.5rem}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter]{display:contents}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=filter] ::slotted(label){min-width:-moz-fit-content;min-width:fit-content}[data-monster-role=control] [data-monster-role=layout] [data-monster-role=select-and-search] monster-select{min-width:-moz-fit-content;min-width:fit-content;width:100%}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/pagination.mjs b/source/components/datatable/stylesheet/pagination.mjs index 24145ea8d876b0081babfdbd2a78613a31eff3b1..8448d76732b2f503d965e7599f52bfcc33539024 100644 --- a/source/components/datatable/stylesheet/pagination.mjs +++ b/source/components/datatable/stylesheet/pagination.mjs @@ -20,7 +20,7 @@ const PaginationStyleSheet = new CSSStyleSheet(); try { PaginationStyleSheet.insertRule(` @layer pagination { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=pagination]{box-sizing:border-box;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.6;text-align:justify}[data-monster-role=pagination] ul{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;list-style:none;margin:20px 0;padding-left:0}[data-monster-role=pagination] ul li{margin:0 1px}[data-monster-role=pagination] ul li a{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch;width:-moz-max-content;width:max-content}[data-monster-role=pagination] ul li a.current{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4);cursor:unset}[data-monster-role=pagination] ul li a.disabled{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=pagination]{box-sizing:border-box;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.6;text-align:justify}[data-monster-role=pagination] ul{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;list-style:none;margin:20px 0;padding-left:0}[data-monster-role=pagination] ul li{margin:0 1px}[data-monster-role=pagination] ul li a{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-table-bg-color);background-position:50%;border-color:var(--monster-table-bg-color);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-table-color);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch;width:-moz-max-content;width:max-content}[data-monster-role=pagination] ul li a.current{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4);cursor:unset}[data-monster-role=pagination] ul li a.disabled{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/save-button.mjs b/source/components/datatable/stylesheet/save-button.mjs index 31d258a4f54c5a458bca0ecff7ca8b80a51650ed..4ca4e99fc754dcb93c5dcdc8b45d682dcd45fd64 100644 --- a/source/components/datatable/stylesheet/save-button.mjs +++ b/source/components/datatable/stylesheet/save-button.mjs @@ -20,7 +20,7 @@ const SaveButtonStyleSheet = new CSSStyleSheet(); try { SaveButtonStyleSheet.insertRule(` @layer savebutton { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;position:relative;width:-moz-fit-content;width:fit-content}[data-monster-role=control] [data-monster-role=badge]{left:0;position:absolute;top:0;transform:translate(-4px,-7px);z-index:var(--monster-z-index-sticky)}[data-monster-role=control] .hidden[data-monster-role=badge]{display:none!important}:host{align-items:center;align-self:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;position:relative;width:-moz-fit-content;width:fit-content}[data-monster-role=control] [data-monster-role=badge]{left:0;position:absolute;top:0;transform:translate(-4px,-7px);z-index:var(--monster-z-index-sticky)}[data-monster-role=control] .hidden[data-monster-role=badge]{display:none!important}:host{align-items:center;align-self:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/select-filter.mjs b/source/components/datatable/stylesheet/select-filter.mjs index 1aeafafffbf1283f0b6c4bd9f6ded759593c21c8..f9a926d60b889bed34700e68191273f06918917a 100644 --- a/source/components/datatable/stylesheet/select-filter.mjs +++ b/source/components/datatable/stylesheet/select-filter.mjs @@ -20,7 +20,7 @@ const SelectFilterStyleSheet = new CSSStyleSheet(); try { SelectFilterStyleSheet.insertRule(` @layer selectfilter { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{padding-bottom:0;padding-top:0;width:100%}[data-monster-role=selection]{font-size:.85em;margin-bottom:0;margin-top:0}[data-monster-role=option-control]{margin-right:8px} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{padding-bottom:0;padding-top:0;width:100%}[data-monster-role=selection]{font-size:.85em;margin-bottom:0;margin-top:0}[data-monster-role=option-control]{margin-right:8px} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/datatable/stylesheet/status.mjs b/source/components/datatable/stylesheet/status.mjs index e1ac114e8704b146dda196130dfc4b90db6f8735..4d93c591a42c70049c90d3f9cd4b440d6aec2d31 100644 --- a/source/components/datatable/stylesheet/status.mjs +++ b/source/components/datatable/stylesheet/status.mjs @@ -20,7 +20,7 @@ const StatusStyleSheet = new CSSStyleSheet(); try { StatusStyleSheet.insertRule(` @layer status { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content}[data-monster-role=control] .monster-spinner{height:1.5rem!important;visibility:hidden;width:1.5rem!important}[data-monster-role=control] [data-monster-state-loader=show]{visibility:visible}:host{align-items:center;align-self:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content}[data-monster-role=control] .monster-spinner{height:1.5rem!important;visibility:hidden;width:1.5rem!important}[data-monster-role=control] [data-monster-state-loader=show]{visibility:visible}:host{align-items:center;align-self:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/context-error.mjs b/source/components/form/context-error.mjs index 920415668fb641236f607c83650e7e618a9a3eda..727ef630b26c2f552f00e8e801c2a25f705b299a 100644 --- a/source/components/form/context-error.mjs +++ b/source/components/form/context-error.mjs @@ -54,18 +54,17 @@ const iconElementSymbol = Symbol("iconElement"); * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library * as well as [pooperjs](https://popper.js.org/docs/v2/). * - * You can create this control either by specifying the HTML tag <monster-context-help-button />` directly in the HTML or using - * Javascript via the `document.createElement('monster-context-help');` method. + * You can create this control either by specifying the HTML tag <monster-context-error />` directly in the HTML or using + * Javascript via the `document.createElement('monster-context-error');` method. * * ```html - * <monster-context-help></monster-context-help> + * <monster-context-error></monster-context-error> * ``` * * Or you can create this CustomControl directly in Javascript: * * ```js - * import {Popper} from '@schukai/component-form/source/popper.js'; - * document.createElement('monster-context-help'); + * document.createElement('monster-context-error'); * ``` * * @startuml context-error.png @@ -251,10 +250,10 @@ function getTemplate() { <div data-monster-role="button" data-monster-attributes="class path:classes.button" part="button"> - <svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" fill="currentColor" class="hidden" + <svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" class="hidden" viewBox="0 0 16 16"> - <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/> - <path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/> + <path fill="var(--monster-color-error-2)" d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/> + <path fill="var(--monster-color-error-2)" d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/> </svg> </div> diff --git a/source/components/form/context-help.mjs b/source/components/form/context-help.mjs index bd8299cc9ccda30088a2ee6801ea6782a9b62212..d7e7c9a5b9336cd00e242d66ccbb490a4e874882 100644 --- a/source/components/form/context-help.mjs +++ b/source/components/form/context-help.mjs @@ -107,8 +107,13 @@ function getTemplate() { return ` <div data-monster-role="control" part="control"> - <div data-monster-role="button" part="button"><svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" fill="currentColor" class="bi bi-question-circle-fill" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.496 6.033h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286a.237.237 0 0 0 .241.247zm2.325 6.443c.61 0 1.029-.394 1.029-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94 0 .533.425.927 1.01.927z"/> + <div data-monster-role="button" part="button"><svg + xmlns="http://www.w3.org/2000/svg" + width="1.2em" + height="1.2em" + viewBox="0 0 16 16"> + <path fill="var(--monster-color-primary-1)" + d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.496 6.033h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286a.237.237 0 0 0 .241.247zm2.325 6.443c.61 0 1.029-.394 1.029-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94 0 .533.425.927 1.01.927z"/> </svg></div> <div data-monster-role="popper" part="popper" tabindex="-1" class="monster-color-primary-1"> diff --git a/source/components/form/select.mjs b/source/components/form/select.mjs index 8c312d1f248404dd034c4571cdbda0cd8ea4c5fa..3e183a7bb328a5709f6194fa3592874b84115a99 100644 --- a/source/components/form/select.mjs +++ b/source/components/form/select.mjs @@ -656,9 +656,11 @@ class Select extends CustomControl { if (url !== undefined && url !== null) { url = validateString(url); } + + hide.call(this); return new Promise((resolve, reject) => { - const response = fetchData.call(this, url).then((map) => { + fetchData.call(this, url).then((map) => { if ( isObject(map) || isArray(map) || @@ -667,12 +669,17 @@ class Select extends CustomControl { ) { this.importOptions(map); setTimeout(() => { + setStatusOrRemoveBadges.call(this,"closed"); resolve(); }, 10); return; } + setStatusOrRemoveBadges.call(this, "error"); reject(new Error("invalid response")); + }).catch((e) => { + setStatusOrRemoveBadges.call(this, "error"); + reject(e); }); }); } @@ -1776,7 +1783,7 @@ function areOptionsAvailableAndInit() { this.setOption("options", options); } - setStatusOrRemoveBadges.call(this, "status"); + setStatusOrRemoveBadges.call(this); removeAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, noOptionsAvailableMessage); return true; @@ -1954,7 +1961,15 @@ function fetchData(url) { const fetchOptions = this.getOption("fetch", {}); - setStatusOrRemoveBadges.call(this, "loading"); + let delayWatch=false; + + // if fetch short time, do not show loading badge, because of flickering + setTimeout(() => { + if(delayWatch===true) return; + setStatusOrRemoveBadges.call(this, "loading"); + delayWatch=true; + },500); + url = new Formatter({ filter: this.getOption("filter.defaultValue") }).format( url, ); @@ -1963,6 +1978,7 @@ function fetchData(url) { return global .fetch(url, fetchOptions) .then((response) => { + delayWatch=true; const contentType = response.headers.get("content-type"); if (contentType && contentType.indexOf("application/json") !== -1) { return response.text(); @@ -1978,6 +1994,7 @@ function fetchData(url) { } }) .catch((e) => { + delayWatch=true; throw e; }); } @@ -1987,7 +2004,7 @@ function fetchData(url) { */ function hide() { this[popperElementSymbol].style.display = "none"; - setStatusOrRemoveBadges.call(this, "status"); + setStatusOrRemoveBadges.call(this,"closed"); removeAttributeToken(this[controlElementSymbol], "class", "open"); } @@ -2461,7 +2478,7 @@ function getTemplate() { data-monster-replace="path:messages.emptyOptions"></div> </div> <div part="status-or-remove-badges" data-monster-role="status-or-remove-badges" - data-monster-attributes="class path:classes.statusOrRemoveBadge | suffix:\\ status-or-remove-badges"></div> + data-monster-attributes="class path:classes.statusOrRemoveBadge"></div> </div> `; } diff --git a/source/components/form/style/context-error.pcss b/source/components/form/style/context-error.pcss index 8cce32d5ed5f76a3ee0577ab2063761c1602e690..bed4c2a47efe2e835c53e5fb240fb391422b8db1 100644 --- a/source/components/form/style/context-error.pcss +++ b/source/components/form/style/context-error.pcss @@ -28,5 +28,5 @@ margin: 0 0.2em; padding: 0; vertical-align: bottom; - transform: translateY(0.15em); + /* transform: translateY(0.15em);*/ } \ No newline at end of file diff --git a/source/components/form/style/context-help.pcss b/source/components/form/style/context-help.pcss index 27a20917f3336d6d46c325855468db9f28c7159d..5cd79dad3099652b02d4ada002a07d1a191a0014 100644 --- a/source/components/form/style/context-help.pcss +++ b/source/components/form/style/context-help.pcss @@ -23,11 +23,15 @@ } } +[data-monster-role="popper"] { + z-index: 1000; +} + :host { display: inline-block; position: relative; margin: 0 0.2em; padding: 0; vertical-align: bottom; - transform: translateY(0.15em); + /**transform: translateY(0.15em);*/ } \ No newline at end of file diff --git a/source/components/form/style/select.pcss b/source/components/form/style/select.pcss index 2778d5fa72fa5092f5ca63361b896308b82dadb4..070311da37af8611649273eb764587373e1a681d 100644 --- a/source/components/form/style/select.pcss +++ b/source/components/form/style/select.pcss @@ -13,6 +13,12 @@ appearance: none; min-height: 1.4em; flex: 4 0 90%; + width: 100%; + overflow: auto; + + scrollbar-color: var(--monster-color-primary-1) var(--monster-color-primary-3); + scrollbar-width: thin; + } .d-none { @@ -26,11 +32,21 @@ div[data-monster-role="control"] { } [data-monster-role=container].open { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-2); + mask-size: 0.8em; + mask-repeat: no-repeat; + mask-position: center center; + } [data-monster-role=container].clear { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-2); + mask-size: 0.8em; + mask-repeat: no-repeat; + mask-position: center center; + } [data-monster-role=control] { @@ -49,23 +65,23 @@ div[data-monster-role="control"] { border-style: var(--monster-border-style); border-width: thin; - background-color: var(--monster-bg-color-primary-2); - color: var(--monster-color-primary-2); - + background-color: var(--monster-bg-color-primary-1); + color: var(--monster-color-primary-1); display: flex; + width: fill-available; } @media (prefers-color-scheme: light) { [data-monster-role=control] { - background-color: var(--monster-bg-color-primary-2); - color: var(--monster-color-primary-2); + background-color: var(--monster-bg-color-primary-1); + color: var(--monster-color-primary-1); border-color: var(--monster-bg-color-primary-3); } [data-monster-role=control]:focus { - outline: 1px dashed var(--monster-color-selection-3); + outline: 1px dashed var(--monster-color-selection-4); outline-offset: 2px; } } @@ -102,25 +118,6 @@ div[data-monster-role=selection] { gap: 7px; } -[data-monster-role=remove-badge] { - background-size: 16px; - background-position: calc(100%) calc(100%); - background-repeat: no-repeat; - width: 16px; - min-height: 16px; - order: 2; - height: 16px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); - margin-left: 5px; -} - -@media (prefers-color-scheme: light) { - [data-monster-role=remove-badge] { - filter: invert(1); - } -} - - [data-monster-role=filter], [data-monster-role=popper-filter] { visibility: hidden; order: 99999999; @@ -158,37 +155,62 @@ div[data-monster-role=selection] { } -.status-or-remove-badges { - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); - background-size: 16px; - - background-repeat: no-repeat; - background-position: center; - +[data-monster-role=remove-badge] { width: 16px; min-height: 16px; + order: 2; + height: 16px; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-2); + mask-size: 0.8em; + mask-repeat: no-repeat; + mask-position: center center; + margin-left: 5px; } -[data-monster-role=status-or-remove-badges].open { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E"); -} - -[data-monster-role=status-or-remove-badges].empty { - background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22currentColor%22%20class%3D%22bi%20bi-dash-circle%22%20viewBox%3D%220%200%2016%2016%22%3E%0A%20%20%3Cpath%20d%3D%22M8%2015A7%207%200%201%201%208%201a7%207%200%200%201%200%2014zm0%201A8%208%200%201%200%208%200a8%208%200%200%200%200%2016z%22%2F%3E%0A%20%20%3Cpath%20d%3D%22M4%208a.5.5%200%200%201%20.5-.5h7a.5.5%200%200%201%200%201h-7A.5.5%200%200%201%204%208z%22%2F%3E%0A%3C%2Fsvg%3E"); -} +[data-monster-role=status-or-remove-badges] { + appearance: none; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + mask-size: 0.8em; + mask-repeat: no-repeat; + mask-position: center center; + background-color: var(--monster-bg-color-primary-4); -[data-monster-role=status-or-remove-badges].clear { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); -} + width: 16px; + min-height: 16px; + + &.closed { + /** pseudo class; this is for setStatusOrRemoveBadges.call(this, "success") remove other states after loading */ + } + + &.open { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-4); + } -[data-monster-role=status-or-remove-badges].loading { - /**background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Cstyle type='text/css'%3E %23c %7B animation: x .5s ease alternate infinite; transform-origin: center; %7D @keyframes x %7B 0%25 %7B transform: scale(1); %7D 50%25 %7B transform: scale(0.1); %7D 80%25 %7B transform: scale(1); %7D %7D %3C/style%3E%3Ccircle id='c' cx='8' cy='8' r='8'/%3E%3C/svg%3E");*/ - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E"); - animation-name: activity; - animation-duration: 1s; - animation-iteration-count: infinite; - animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + &.empty { + mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22currentColor%22%20class%3D%22bi%20bi-dash-circle%22%20viewBox%3D%220%200%2016%2016%22%3E%0A%20%20%3Cpath%20d%3D%22M8%2015A7%207%200%201%201%208%201a7%207%200%200%201%200%2014zm0%201A8%208%200%201%200%208%200a8%208%200%200%200%200%2016z%22%2F%3E%0A%20%20%3Cpath%20d%3D%22M4%208a.5.5%200%200%201%20.5-.5h7a.5.5%200%200%201%200%201h-7A.5.5%200%200%201%204%208z%22%2F%3E%0A%3C%2Fsvg%3E"); + background-color: var(--monster-bg-color-primary-4); + } + + &.clear { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'><path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-4); + } + + &.error { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-error-1); + } + + &.loading { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E"); + background-color: var(--monster-bg-color-primary-4); + animation-name: activity; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + } } @keyframes activity { @@ -208,6 +230,9 @@ div[data-monster-role=selection] { display: flex; flex-direction: column; flex-grow: 1; + scrollbar-color: var(--monster-color-primary-1) var(--monster-color-primary-3); + scrollbar-width: thin; + } [data-monster-role=option] { @@ -237,13 +262,13 @@ div[data-monster-role=selection] { [data-monster-role="no-options"] { margin: 1.1em 0 0 1.1em; - color: var(--monster-color-warning-2); - background-color: var(--monster-bg-color-warning-2); + color: var(--monster-color-warning-4); + background-color: var(--monster-bg-color-warning-4); } .selected { - background-color: var(--monster-bg-color-primary-3); - color: var(--monster-color-primary-3); + background-color: var(--monster-bg-color-primary-2); + color: var(--monster-color-primary-2); } [data-monster-role=option][data-monster-visibility=hidden] { diff --git a/source/components/form/style/toggle-switch.pcss b/source/components/form/style/toggle-switch.pcss index 2319c3b89fc79962882705944b2393ed7068e14e..55259d3306e2d69db1cf679d8df1d11d7e18bd73 100644 --- a/source/components/form/style/toggle-switch.pcss +++ b/source/components/form/style/toggle-switch.pcss @@ -31,9 +31,9 @@ } - & .switch-radio input[type="radio"] { +/* & .switch-radio input[type="radio"] { display: none; - } + }*/ & .label { max-width: 100%; diff --git a/source/components/form/stylesheet/action-button.mjs b/source/components/form/stylesheet/action-button.mjs index a71c235a7293b3accca64b10e69505081de29d13..b41072675ca5bfa2f49bc374548ed1dc05554847 100644 --- a/source/components/form/stylesheet/action-button.mjs +++ b/source/components/form/stylesheet/action-button.mjs @@ -20,7 +20,7 @@ const ActionButtonStyleSheet = new CSSStyleSheet(); try { ActionButtonStyleSheet.insertRule(` @layer actionbutton { -:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control] div[data-monster-role=popper]{padding:2px}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons]{display:flex;flex-direction:column}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] button{background:transparent;border:0}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] monster-message-state-button:not(:last-child){border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-color-primary-1)}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] monster-message-state-button:not(:last-child) ::part(button){border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-color-primary-1)} +:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control] div[data-monster-role=popper]{padding:2px}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons]{display:flex;flex-direction:column}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] button{background:transparent;border:0}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] monster-message-state-button:not(:last-child){border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-color-primary-1)}[data-monster-role=control] [data-monster-role=container] [data-monster-role=buttons] monster-message-state-button:not(:last-child) ::part(button){border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-color-primary-1)} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/stylesheet/context-error.mjs b/source/components/form/stylesheet/context-error.mjs index b847b2b3bef60a5868834ad55a7ce14f6981242a..0ed5a87eab7adf5116b3eb042d7ca29a8d84985b 100644 --- a/source/components/form/stylesheet/context-error.mjs +++ b/source/components/form/stylesheet/context-error.mjs @@ -20,7 +20,7 @@ const ContextErrorStyleSheet = new CSSStyleSheet(); try { ContextErrorStyleSheet.insertRule(` @layer contexterror { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=control]{line-height:1em;margin:0;padding:0;position:relative}[data-monster-role=control] [data-monster-role=button]{display:inline-block;position:relative}[data-monster-role=control] [data-monster-role=button] svg{cursor:pointer}[data-monster-role=control] [data-monster-role=button] svg.hidden{cursor:default;visibility:hidden}:host{display:inline-block;margin:0 .2em;padding:0;position:relative;transform:translateY(.15em);vertical-align:bottom} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=control]{line-height:1em;margin:0;padding:0;position:relative}[data-monster-role=control] [data-monster-role=button]{display:inline-block;position:relative}[data-monster-role=control] [data-monster-role=button] svg{cursor:pointer}[data-monster-role=control] [data-monster-role=button] svg.hidden{cursor:default;visibility:hidden}:host{display:inline-block;margin:0 .2em;padding:0;position:relative;vertical-align:bottom} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/stylesheet/context-help.mjs b/source/components/form/stylesheet/context-help.mjs index a9e1c01dd70e2d76b64eddc3e6a3666c23d17041..a2bc5b3fc41d93754dc6601ce4bc55bb23ee84a2 100644 --- a/source/components/form/stylesheet/context-help.mjs +++ b/source/components/form/stylesheet/context-help.mjs @@ -20,7 +20,7 @@ const ContextHelpStyleSheet = new CSSStyleSheet(); try { ContextHelpStyleSheet.insertRule(` @layer contexthelp { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=control]{line-height:1em;margin:0;padding:0;position:relative}[data-monster-role=control] [data-monster-role=button]{display:inline-block;position:relative}[data-monster-role=control] [data-monster-role=button] svg{cursor:pointer}[data-monster-role=control] [data-monster-role=button] svg.hidden{cursor:default;visibility:hidden}:host{display:inline-block;margin:0 .2em;padding:0;position:relative;transform:translateY(.15em);vertical-align:bottom} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=control]{line-height:1em;margin:0;padding:0;position:relative}[data-monster-role=control] [data-monster-role=button]{display:inline-block;position:relative}[data-monster-role=control] [data-monster-role=button] svg{cursor:pointer}[data-monster-role=control] [data-monster-role=button] svg.hidden{cursor:default;visibility:hidden}[data-monster-role=popper]{z-index:1000}:host{display:inline-block;margin:0 .2em;padding:0;position:relative;vertical-align:bottom} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/stylesheet/select.mjs b/source/components/form/stylesheet/select.mjs index d2690847b7095906e619b427dae8d865635c8215..47bea4db6dc56c46a5ad78c2bdcfe97b6b52cbf4 100644 --- a/source/components/form/stylesheet/select.mjs +++ b/source/components/form/stylesheet/select.mjs @@ -20,7 +20,7 @@ const SelectStyleSheet = new CSSStyleSheet(); try { SelectStyleSheet.insertRule(` @layer select { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\")}[data-monster-role=container].clear{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-2);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=remove-badge]{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;height:16px;margin-left:5px;min-height:16px;order:2;width:16px}@media (prefers-color-scheme:light){[data-monster-role=remove-badge]{filter:invert(1)}}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}.status-or-remove-badges{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");background-position:50%;background-repeat:no-repeat;background-size:16px;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges].open{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\")}[data-monster-role=status-or-remove-badges].empty{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\")}[data-monster-role=status-or-remove-badges].clear{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}[data-monster-role=status-or-remove-badges].loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em;overflow:auto;scrollbar-color:var(--monster-color-primary-1) var(--monster-color-primary-3);scrollbar-width:thin;width:100%}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\")}[data-monster-role=container].clear,[data-monster-role=container].open{background-color:var(--monster-bg-color-primary-2);-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em}[data-monster-role=container].clear{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-1);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem;width:-webkit-fill-available;width:-moz-available;width:fill-available}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-1)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}[data-monster-role=remove-badge]{background-color:var(--monster-bg-color-primary-2);height:16px;margin-left:5px;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");order:2}[data-monster-role=remove-badge],[data-monster-role=status-or-remove-badges]{-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.open[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E\")}.empty[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\")}.clear[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.error[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-error-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.loading[data-monster-role=status-or-remove-badges]{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E\")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;scrollbar-color:var(--monster-color-primary-1) var(--monster-color-primary-3);scrollbar-width:thin}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/stylesheet/state-button.mjs b/source/components/form/stylesheet/state-button.mjs index e8678f953959204067a7537f4337cee2fb291986..11cb1bbbda0176ce3951f5c46fb38cdcf1911d2a 100644 --- a/source/components/form/stylesheet/state-button.mjs +++ b/source/components/form/stylesheet/state-button.mjs @@ -20,7 +20,7 @@ const StateButtonStyleSheet = new CSSStyleSheet(); try { StateButtonStyleSheet.insertRule(` @layer statebutton { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/form/stylesheet/toggle-switch.mjs b/source/components/form/stylesheet/toggle-switch.mjs index 9ac5e7ba1c45afeeea0d6c41fbad0f9f67a6271a..667651b128b32788547efeef3cd0c04249d42d6e 100644 --- a/source/components/form/stylesheet/toggle-switch.mjs +++ b/source/components/form/stylesheet/toggle-switch.mjs @@ -20,7 +20,7 @@ const ToggleSwitchStyleSheet = new CSSStyleSheet(); try { ToggleSwitchStyleSheet.insertRule(` @layer toggleswitch { -:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{box-sizing:border-box;font-family:inherit;font-size:inherit;margin:0;outline:none}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}[data-monster-role=control] .switch{border-color:var(--monster-bg-color-primary-3);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;display:inline-grid;grid-template-columns:1fr 1fr;height:2.5em;position:relative;transition:background-color .2s;width:100%}[data-monster-role=control] .switch-radio input[type=radio]{display:none}[data-monster-role=control] .label{display:block;height:2.5em;line-height:2.5em;max-width:100%;overflow:hidden;padding:0 .2em;text-align:center;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[data-monster-role=control] .switch-slider{background-color:var(--monster-bg-color-primary-4);bottom:4px;left:4px;position:absolute;right:4px;top:4px;transition:.2s;width:calc(50% - 4px)}[data-monster-role=control] .switch[data-monster-state=on] .label.off{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=off] .label.off,[data-monster-role=control] .switch[data-monster-state=on] .label.on{visibility:visible}[data-monster-role=control] .switch[data-monster-state=off] .label.on{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=on] .switch-slider{transform:translateX(100%)} +:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{box-sizing:border-box;font-family:inherit;font-size:inherit;margin:0;outline:none}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}[data-monster-role=control] .switch{border-color:var(--monster-bg-color-primary-3);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;display:inline-grid;grid-template-columns:1fr 1fr;height:2.5em;position:relative;transition:background-color .2s;width:100%}[data-monster-role=control] .label{display:block;height:2.5em;line-height:2.5em;max-width:100%;overflow:hidden;padding:0 .2em;text-align:center;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[data-monster-role=control] .switch-slider{background-color:var(--monster-bg-color-primary-4);bottom:4px;left:4px;position:absolute;right:4px;top:4px;transition:.2s;width:calc(50% - 4px)}[data-monster-role=control] .switch[data-monster-state=on] .label.off{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=off] .label.off,[data-monster-role=control] .switch[data-monster-state=on] .label.on{visibility:visible}[data-monster-role=control] .switch[data-monster-state=off] .label.on{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=on] .switch-slider{transform:translateX(100%)} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/collapse.mjs b/source/components/host/collapse.mjs index a71fdd940817e8ab54fb2b16d1bf0b1f1e521cb2..f8eb142de33de16418ecbedc19efdeda0b57134a 100644 --- a/source/components/host/collapse.mjs +++ b/source/components/host/collapse.mjs @@ -467,11 +467,6 @@ function initStateFromHostConfig() { return Promise.resolve({}); } - // Not working propper - // if (!(host instanceof Host)) { - // throw new TypeError("the host must be a monster-host"); - // } - const configKey = getConfigKey.call(this); return host .getConfig(configKey) diff --git a/source/components/host/style/collapse.pcss b/source/components/host/style/collapse.pcss index 1ebf57b5cec90d4372b84f0910ddea5d38dfbdf4..319c325040df941bb315e817a28dcbdf3e8b016a 100644 --- a/source/components/host/style/collapse.pcss +++ b/source/components/host/style/collapse.pcss @@ -34,8 +34,6 @@ box-sizing: border-box; width: 100%; - background-color: var(--monster-bg-color-primary-2); - color: var(--monster-color-primary-2); & .padding { padding: 1rem; @@ -51,6 +49,8 @@ @media (prefers-color-scheme: dark) { background: var(--monster-color-primary-1); } + + transition: background 0.4s ease-in-out; } @@ -59,6 +59,7 @@ & [data-monster-role="detail"].active { height: var(--monster-height); + transition: height 0.4s ease-in-out; } diff --git a/source/components/host/stylesheet/call-button.mjs b/source/components/host/stylesheet/call-button.mjs index 992f151b9792d2c36201219cc29a1c4082c5953f..9e6b68d9fd447809767bce3096cf779de005b799 100644 --- a/source/components/host/stylesheet/call-button.mjs +++ b/source/components/host/stylesheet/call-button.mjs @@ -20,7 +20,7 @@ const CallButtonStyleSheet = new CSSStyleSheet(); try { CallButtonStyleSheet.insertRule(` @layer callbutton { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] a[data-monster-role=filter-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=filter-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-filter-square'%3E%3Cpath d='M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z'/%3E%3Cpath d='M6 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}.hidden[data-monster-role=control]{display:none} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] a[data-monster-role=filter-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=filter-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-filter-square'%3E%3Cpath d='M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z'/%3E%3Cpath d='M6 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}.hidden[data-monster-role=control]{display:none} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/collapse.mjs b/source/components/host/stylesheet/collapse.mjs index f41a00756d3d12f54bd80623b0bb7bb3564a1139..f3b5c0ec4ec106fbe144c92417b6398eeb500478 100644 --- a/source/components/host/stylesheet/collapse.mjs +++ b/source/components/host/stylesheet/collapse.mjs @@ -20,7 +20,7 @@ const CollapseStyleSheet = new CSSStyleSheet(); try { CollapseStyleSheet.insertRule(` @layer collapse { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);font-size:1rem;font-weight:400;height:0;line-height:1.6;text-align:justify;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height)} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{box-sizing:border-box;font-size:1rem;font-weight:400;height:0;line-height:1.6;text-align:justify;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0;transition:background .4s ease-in-out}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height);transition:height .4s ease-in-out} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/details.mjs b/source/components/host/stylesheet/details.mjs index 59c908d2bd5b80432110abfdcf1bd0ca1f6439ba..4da6e2980a709d239a60f7ecde6eac8e850b2563 100644 --- a/source/components/host/stylesheet/details.mjs +++ b/source/components/host/stylesheet/details.mjs @@ -20,7 +20,7 @@ const DetailsStyleSheet = new CSSStyleSheet(); try { DetailsStyleSheet.insertRule(` @layer details { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/host.mjs b/source/components/host/stylesheet/host.mjs index 0e92ac3083c0defcd22127095722afccaa5ccb54..737a8f4c1063e83a19da3bc5fe3a426475c5a849 100644 --- a/source/components/host/stylesheet/host.mjs +++ b/source/components/host/stylesheet/host.mjs @@ -20,7 +20,7 @@ const HostStyleSheet = new CSSStyleSheet(); try { HostStyleSheet.insertRule(` @layer host { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/overlay.mjs b/source/components/host/stylesheet/overlay.mjs index af268d660d3aeff9e962adcb47e96bd1553b638b..0aaae4620696c30516e4368e6d61f69a07f5b751 100644 --- a/source/components/host/stylesheet/overlay.mjs +++ b/source/components/host/stylesheet/overlay.mjs @@ -20,7 +20,7 @@ const OverlayStyleSheet = new CSSStyleSheet(); try { OverlayStyleSheet.insertRule(` @layer overlay { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/toggle-button.mjs b/source/components/host/stylesheet/toggle-button.mjs index 3aa94777e5b361f04fe7a513dd763863542306df..a954d7421ca03bb621784c3ffbbcb56172bb2efa 100644 --- a/source/components/host/stylesheet/toggle-button.mjs +++ b/source/components/host/stylesheet/toggle-button.mjs @@ -20,7 +20,7 @@ const ToggleButtonStyleSheet = new CSSStyleSheet(); try { ToggleButtonStyleSheet.insertRule(` @layer togglebutton { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] a[data-monster-role=filter-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=filter-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-filter-square'%3E%3Cpath d='M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z'/%3E%3Cpath d='M6 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}.hidden[data-monster-role=control]{display:none} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;justify-content:flex-end}[data-monster-role=control] a[data-monster-role=filter-button]{align-items:center;background:none;color:var(--monster-color-primary-1);display:flex}[data-monster-role=control] a[data-monster-role=filter-button]:after{content:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-filter-square'%3E%3Cpath d='M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z'/%3E%3Cpath d='M6 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5'/%3E%3C/svg%3E\");margin:2px 3px 0 5px;padding-top:4px}.hidden[data-monster-role=control]{display:none} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/host/stylesheet/viewer.mjs b/source/components/host/stylesheet/viewer.mjs index ba15e3f21a541426169d268fb5d428d89cfe524b..81b151dda563b1652062b9860a6b45fdbaf239f3 100644 --- a/source/components/host/stylesheet/viewer.mjs +++ b/source/components/host/stylesheet/viewer.mjs @@ -20,7 +20,7 @@ const ViewerStyleSheet = new CSSStyleSheet(); try { ViewerStyleSheet.insertRule(` @layer viewer { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=viewer]{height:inherit} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}[data-monster-role=viewer]{height:inherit} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/layout/style/tabs.pcss b/source/components/layout/style/tabs.pcss index 95e1aaf8c1ba4fdc77023968de5a3f748be839e6..3a7953bddaf5025b20a6efae2b6378535f7b3cc1 100644 --- a/source/components/layout/style/tabs.pcss +++ b/source/components/layout/style/tabs.pcss @@ -173,7 +173,6 @@ nav[data-monster-role=nav] { [data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover, [data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active] { border: 0; - @media (prefers-color-scheme: dark) { color: var(--monster-color-secondary-4) !important; } diff --git a/source/components/layout/stylesheet/tabs.mjs b/source/components/layout/stylesheet/tabs.mjs index 57fe7328cb0825aa86c9537d1f0d6c978a1b3107..13f01d61651878419e125a0d5778d7c8a02d4bb7 100644 --- a/source/components/layout/stylesheet/tabs.mjs +++ b/source/components/layout/stylesheet/tabs.mjs @@ -20,7 +20,7 @@ const TabsStyleSheet = new CSSStyleSheet(); try { TabsStyleSheet.insertRule(` @layer tabs { -:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:\"\";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{align-items:flex-end;border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4;white-space:pre}[data-monster-role=nav] button{align-content:center;align-items:center;align-self:stretch;border:none;border-bottom:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}[data-monster-role=nav] button:not([disabled]):hover{border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{background-color:inherit;border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-secondary-1)!important}@media (prefers-color-scheme:dark){[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)!important}}[data-monster-role=nav] button[disabled]{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0}@media (prefers-color-scheme:dark){[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{color:var(--monster-color-secondary-4)!important}} +:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:\"\";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{align-items:flex-end;border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4;white-space:pre}[data-monster-role=nav] button{align-content:center;align-items:center;align-self:stretch;border:none;border-bottom:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}[data-monster-role=nav] button:not([disabled]):hover{border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{background-color:inherit;border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-secondary-1)!important}@media (prefers-color-scheme:dark){[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)!important}}[data-monster-role=nav] button[disabled]{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0}@media (prefers-color-scheme:dark){[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{color:var(--monster-color-secondary-4)!important}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/layout/tabs.mjs b/source/components/layout/tabs.mjs index 65f4c1bec9e0a22046df8349f606200a06a93bca..65a6f9927d4c8aee854579c87288d8babf78d97a 100644 --- a/source/components/layout/tabs.mjs +++ b/source/components/layout/tabs.mjs @@ -192,6 +192,8 @@ class Tabs extends CustomElement { * @property {string} templates.main Main template * @property {Object} labels * @property {string} labels.new-tab-label="New Tab" + * @property {Object} features + * @property {number} features.openDelay=500 Open delay in milliseconds * @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) * @property {String} fetch.redirect=error * @property {String} fetch.method=GET @@ -223,6 +225,10 @@ class Tabs extends CustomElement { accept: "text/html", }, }, + + features: { + openDelay: null, + }, classes: { button: "monster-theme-primary-1", @@ -577,7 +583,17 @@ function show(element) { if (id === reference) { node.classList.add("active"); - + + const openDelay = parseInt(this.getOption("features.openDelay"), 10); + console.log(openDelay) + if(!isNaN(openDelay) && openDelay>0) { + node.style.visibility = "hidden"; + + setTimeout(() => { + node.style.visibility = "visible"; + }, openDelay); + } + // get all data- from button and filter out data-monster-attributes and data-monster-insert const data = {}; const mask = [ diff --git a/source/components/notify/stylesheet/message.mjs b/source/components/notify/stylesheet/message.mjs index 8453ecdee27eb28044699654f4de9088f9f92ed8..d4f23972c5d7741a825bf42a59f97163cb43dc6c 100644 --- a/source/components/notify/stylesheet/message.mjs +++ b/source/components/notify/stylesheet/message.mjs @@ -20,7 +20,7 @@ const MessageStyleSheet = new CSSStyleSheet(); try { MessageStyleSheet.insertRule(` @layer message { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:\"\";display:block;height:100%;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/style/color.pcss b/source/components/style/color.pcss index 5ba3170228734dda3c420e704bc518ac3ef900b9..1237df580b53a1e427e59861f4fc9373ac7b74d2 100644 --- a/source/components/style/color.pcss +++ b/source/components/style/color.pcss @@ -254,4 +254,15 @@ License: [MIT](https://github.com/matthewhowell/reasonable-colors/blob/master/LI --monster-color-pink-4: #d2008f; --monster-color-pink-5: #790051; --monster-color-pink-6: #4b0030; + + + /* Tangerine Gradient for Accessibility (not reasonable color) */ + --monster-gradient-tangerine-1: #e5b875; + --monster-gradient-tangerine-2: #d9a362; + --monster-gradient-tangerine-3: #c08a4e; + --monster-gradient-tangerine-4: #a7713b; + --monster-gradient-tangerine-5: #8f5a28; + --monster-gradient-tangerine-6: #360505; + + } \ No newline at end of file diff --git a/source/components/style/icons.pcss b/source/components/style/icons.pcss index d13699e52c5cf08abc19904f61988c6778817aca..38bbfff12aabc27183c398e31176fe562b5f11ed 100644 --- a/source/components/style/icons.pcss +++ b/source/components/style/icons.pcss @@ -1,110 +1,114 @@ - @import "mixin/icon.pcss"; @mixin icon info { mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533L8.93 6.588zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0z'/%3E%3C/svg%3E"); } +@mixin icon on { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E"); +} + +@mixin icon off { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E"); +} + @mixin icon positiv { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); } @mixin icon negativ { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); } @mixin icon warning { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); } @mixin icon neutral { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); } @mixin icon question { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286zm1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286zm1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94z'/%3E%3C/svg%3E"); } @mixin icon plus { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z'/%3E%3C/svg%3E"); } @mixin icon dash { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'/%3E%3C/svg%3E"); } @mixin icon gear { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z'/%3E%3C/svg%3E"); } @mixin icon home { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5ZM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5 5 5Z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5ZM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5 5 5Z'/%3E%3C/svg%3E"); } @mixin icon counterclockwise { - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z'/%3E%3C/svg%3E"); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z'/%3E%3C/svg%3E"); } @for $i from 2 to 3 { - -.monster-icon-success-$i:before { - background-color: var(--monster-color-success-$i); - color: var(--monster-bg-color-success-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); -} - -.monster-icon-warning-$i:before { - background-color: var(--monster-color-warning-$i); - color: var(--monster-bg-color-warning-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); -} - -.monster-icon-error-$i:before { - background-color: var(--monster-color-error-$i); - color: var(--monster-bg-color-error-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); -} - -.monster-icon-error-$i:before, .monster-icon-warning-$i:before, .monster-icon-success-$i:before { - content: ""; - display: inline-block; - height: 1em; - width: 1em; - mask-position: center; - mask-repeat: no-repeat; - mask-size: contain; - -} + .monster-icon-success-$i:before { + background-color: var(--monster-color-success-$i); + color: var(--monster-bg-color-success-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); + } + + .monster-icon-warning-$i:before { + background-color: var(--monster-color-warning-$i); + color: var(--monster-bg-color-warning-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); + } + + .monster-icon-error-$i:before { + background-color: var(--monster-color-error-$i); + color: var(--monster-bg-color-error-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + } + + .monster-icon-error-$i:before, .monster-icon-warning-$i:before, .monster-icon-success-$i:before { + content: ""; + display: inline-block; + height: 1em; + width: 1em; + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + } } @for $i from 1 to 4 by 3 { - -.monster-icon-success-$i:before { - background-color: var(--monster-bg-color-success-$i); - color: var(--monster-color-success-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); -} - -.monster-icon-warning-$i:before { - background-color: var(--monster-bg-color-warning-$i); - color: var(--monster-color-warning-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); -} - -.monster-icon-error-$i:before { - background-color: var(--monster-bg-color-error-$i); - color: var(--monster-color-error-$i); - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); -} - -.monster-icon-error-$i:before, .monster-icon-warning-$i:before, .monster-icon-success-$i:before { - content: ""; - display: inline-block; - height: 1em; - width: 1em; - mask-position: center; - mask-repeat: no-repeat; - mask-size: contain; - -} + + .monster-icon-success-$i:before { + background-color: var(--monster-bg-color-success-$i); + color: var(--monster-color-success-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z'/%3E%3C/svg%3E"); + } + + .monster-icon-warning-$i:before { + background-color: var(--monster-bg-color-warning-$i); + color: var(--monster-color-warning-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); + } + + .monster-icon-error-$i:before { + background-color: var(--monster-bg-color-error-$i); + color: var(--monster-color-error-$i); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E"); + } + + .monster-icon-error-$i:before, .monster-icon-warning-$i:before, .monster-icon-success-$i:before { + content: ""; + display: inline-block; + height: 1em; + width: 1em; + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + } } \ No newline at end of file diff --git a/source/components/style/mixin/icon.pcss b/source/components/style/mixin/icon.pcss index 15ef0e3cd06851d09b0d6b933d230071ca70f96c..f280e104c70169ef427927d3594d63f73dd57b24 100644 --- a/source/components/style/mixin/icon.pcss +++ b/source/components/style/mixin/icon.pcss @@ -1,43 +1,38 @@ @define-mixin icon $name { @for $i from 1 to 4 { - - .monster-icon-primary-$(i)-$(name)::before { - background-color: var(--monster-color-primary-$i); - color: var(--monster-bg-color-primary-$i); - } - - .monster-icon-secondary-$(i)-$(name)::before { - background-color: var(--monster-color-secondary-$i); - color: var(--monster-bg-color-secondary-$i); - } - - .monster-icon-tertiary-$(i)-$(name)::before { - background-color: var(--monster-color-tertiary-$i); - color: var(--monster-bg-color-tertiary-$i); - } - - .monster-icon-secondary-$(i)-$(name)::before { - background-color: var(--monster-color-secondary-$i); - color: var(--monster-bg-color-secondary-$i); - } - - - .monster-icon-primary-$(i)-$(name)::before, - .monster-icon-secondary-$(i)-$(name)::before, - .monster-icon-tertiary-$(i)-$(name)::before { - content: ""; - display: inline-block; - width: 1em; - height: 1em; - mask-repeat: no-repeat; - mask-position: center; - mask-size: contain; - @mixin-content; - } - - - + .monster-icon-primary-$(i)-$(name)::before { + background-color: var(--monster-color-primary-$i); + color: var(--monster-bg-color-primary-$i); + } + + .monster-icon-secondary-$(i)-$(name)::before { + background-color: var(--monster-color-secondary-$i); + color: var(--monster-bg-color-secondary-$i); + } + + .monster-icon-tertiary-$(i)-$(name)::before { + background-color: var(--monster-color-tertiary-$i); + color: var(--monster-bg-color-tertiary-$i); + } + + .monster-icon-secondary-$(i)-$(name)::before { + background-color: var(--monster-color-secondary-$i); + color: var(--monster-bg-color-secondary-$i); + } + + .monster-icon-primary-$(i)-$(name)::before, + .monster-icon-secondary-$(i)-$(name)::before, + .monster-icon-tertiary-$(i)-$(name)::before { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + @mixin-content; + } } } \ No newline at end of file diff --git a/source/components/style/mixin/property.pcss b/source/components/style/mixin/property.pcss index c2ebbead02ec4e91df3c7e5b89ff2c44fe203b1e..fc5594549bccfa5fa499b34c8fca2d19dbf50e0d 100644 --- a/source/components/style/mixin/property.pcss +++ b/source/components/style/mixin/property.pcss @@ -267,8 +267,8 @@ /** PRIMARY / DISABLED */ - --monster-color-primary-disabled-1: var(--monster-color-gray-3); - --monster-color-primary-disabled-2: var(--monster-color-gray-1); + --monster-color-primary-disabled-1: var(--monster-color-gray-4); + --monster-color-primary-disabled-2: var(--monster-color-gray-4); --monster-color-primary-disabled-3: var(--monster-color-gray-4); --monster-color-primary-disabled-4: var(--monster-color-gray-4); @@ -293,4 +293,22 @@ --monster-color-gradient-2: #fd1d1d; --monster-color-gradient-3: #fcb045; +} + +@define-mixin defaultTableProperty { + + --monster-table-bg-color: var(--monster-gradient-tangerine-1); + --monster-table-color: var(--monster-gradient-tangerine-6); + --monster-table-border-color: var(--monster-gradient-tangerine-2); + --monster-table-hover-color: var(--monster-gradient-tangerine-6); + --monster-table-hover-bg-color: var(--monster-gradient-tangerine-2); + + @media (prefers-color-scheme: dark) { + --monster-table-bg-color: var(--monster-color-gray-5); + --monster-table-color: var(--monster-color-gray-1); + --monster-table-border-color: var(--monster-color-gray-3); + --monster-table-hover-color: var(--monster-color-gray-1); + --monster-table-hover-bg-color: var(--monster-color-gray-6); + } + } \ No newline at end of file diff --git a/source/components/style/property.pcss b/source/components/style/property.pcss index 5e723418829b29e10894d677eeda30d87605bdbb..0b5420ea80e10c58fb4b41aaa943f9cfd8a5eb4e 100644 --- a/source/components/style/property.pcss +++ b/source/components/style/property.pcss @@ -7,6 +7,7 @@ @mixin defaultColorProperty; @mixin defaultShadowProperty; @mixin defaultTextProperty; + @mixin defaultTableProperty; @mixin defaultBorderProperty; @mixin defaultPoperProperty; @mixin defaultZIndexProperty; diff --git a/source/components/style/table.pcss b/source/components/style/table.pcss index 7cac9491a514df630bf2290ddf37f59de66968a8..9c6cdfa8342443b243fa48f72d3436d494a43c88 100644 --- a/source/components/style/table.pcss +++ b/source/components/style/table.pcss @@ -30,16 +30,18 @@ th { display: block; width: 100%; overflow-x: auto; - background-color: var(--monster-bg-color-primary-2); - color: var(--monster-color-primary-2); + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); padding: 8px; margin: 0; box-sizing: border-box; } .monster-table tbody tr th, .monster-table tbody tr td { - background-color: var(--monster-bg-color-primary-1); - border: none; + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); + border-bottom: 1px solid var(--monster-table-border-color); + } diff --git a/source/components/style/theme.pcss b/source/components/style/theme.pcss index 75e72720936f72c5a0ea81d74d6985a57b40fe69..80dfb1b79e66d77840ead70295151e51c1b10ebc 100644 --- a/source/components/style/theme.pcss +++ b/source/components/style/theme.pcss @@ -109,11 +109,30 @@ color: var(--monster-color-selection-$i); } +} - - - - - +.monster-theme-table-container-1 { + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); + border: 1px solid var(--monster-table-border-color); +} + +.monster-theme-table-row-1 { + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); + border: 1px solid var(--monster-table-border-color); +} + +.monster-theme-table-elements { + background-color: var(--monster-table-bg-color); + color: var(--monster-table-color); +} + +.monster-theme-table-background { + background-color: var(--monster-table-bg-color); +} + +.monster-theme-background-inherit { + background-color: inherit !important; } diff --git a/source/components/stylesheet/color.mjs b/source/components/stylesheet/color.mjs index c97bedfdd7add5fb288757e5617e35552dbdb1ba..f2614820fb5373cacedc3aafe7ae21b063cff927 100644 --- a/source/components/stylesheet/color.mjs +++ b/source/components/stylesheet/color.mjs @@ -20,7 +20,7 @@ const ColorStyleSheet = new CSSStyleSheet(); try { ColorStyleSheet.insertRule(` @layer color { -:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030} +:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/stylesheet/icons.mjs b/source/components/stylesheet/icons.mjs index ab2d749188bcb731a60f48c6fed37991b456baba..4be5c1dac099f10f37c3c79f5a7085c2b2e390de 100644 --- a/source/components/stylesheet/icons.mjs +++ b/source/components/stylesheet/icons.mjs @@ -20,7 +20,7 @@ const IconsStyleSheet = new CSSStyleSheet(); try { IconsStyleSheet.insertRule(` @layer icons { -.monster-icon-primary-1-info:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-info:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-info:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-info:before,.monster-icon-secondary-1-info:before,.monster-icon-tertiary-1-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-info:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-info:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-info:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-info:before,.monster-icon-secondary-2-info:before,.monster-icon-tertiary-2-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-info:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-info:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-info:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-info:before,.monster-icon-secondary-3-info:before,.monster-icon-tertiary-3-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-info:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-info:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-info:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-info:before,.monster-icon-secondary-4-info:before,.monster-icon-tertiary-4-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-positiv:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-positiv:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-positiv:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-positiv:before,.monster-icon-secondary-1-positiv:before,.monster-icon-tertiary-1-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-positiv:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-positiv:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-positiv:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-positiv:before,.monster-icon-secondary-2-positiv:before,.monster-icon-tertiary-2-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-positiv:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-positiv:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-positiv:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-positiv:before,.monster-icon-secondary-3-positiv:before,.monster-icon-tertiary-3-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-positiv:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-positiv:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-positiv:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-positiv:before,.monster-icon-secondary-4-positiv:before,.monster-icon-tertiary-4-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-negativ:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-negativ:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-negativ:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-negativ:before,.monster-icon-secondary-1-negativ:before,.monster-icon-tertiary-1-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-negativ:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-negativ:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-negativ:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-negativ:before,.monster-icon-secondary-2-negativ:before,.monster-icon-tertiary-2-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-negativ:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-negativ:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-negativ:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-negativ:before,.monster-icon-secondary-3-negativ:before,.monster-icon-tertiary-3-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-negativ:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-negativ:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-negativ:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-negativ:before,.monster-icon-secondary-4-negativ:before,.monster-icon-tertiary-4-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-warning:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-warning:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-warning:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-warning:before,.monster-icon-secondary-1-warning:before,.monster-icon-tertiary-1-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-warning:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-warning:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-warning:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-warning:before,.monster-icon-secondary-2-warning:before,.monster-icon-tertiary-2-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-warning:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-warning:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-warning:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-warning:before,.monster-icon-secondary-3-warning:before,.monster-icon-tertiary-3-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-warning:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-warning:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-warning:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-warning:before,.monster-icon-secondary-4-warning:before,.monster-icon-tertiary-4-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-neutral:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-neutral:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-neutral:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-neutral:before,.monster-icon-secondary-1-neutral:before,.monster-icon-tertiary-1-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-neutral:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-neutral:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-neutral:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-neutral:before,.monster-icon-secondary-2-neutral:before,.monster-icon-tertiary-2-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-neutral:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-neutral:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-neutral:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-neutral:before,.monster-icon-secondary-3-neutral:before,.monster-icon-tertiary-3-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-neutral:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-neutral:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-neutral:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-neutral:before,.monster-icon-secondary-4-neutral:before,.monster-icon-tertiary-4-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-question:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-question:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-question:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-question:before,.monster-icon-secondary-1-question:before,.monster-icon-tertiary-1-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-question:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-question:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-question:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-question:before,.monster-icon-secondary-2-question:before,.monster-icon-tertiary-2-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-question:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-question:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-question:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-question:before,.monster-icon-secondary-3-question:before,.monster-icon-tertiary-3-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-question:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-question:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-question:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-question:before,.monster-icon-secondary-4-question:before,.monster-icon-tertiary-4-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-question-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-plus:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-plus:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-plus:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-plus:before,.monster-icon-secondary-1-plus:before,.monster-icon-tertiary-1-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-plus:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-plus:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-plus:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-plus:before,.monster-icon-secondary-2-plus:before,.monster-icon-tertiary-2-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-plus:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-plus:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-plus:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-plus:before,.monster-icon-secondary-3-plus:before,.monster-icon-tertiary-3-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-plus:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-plus:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-plus:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-plus:before,.monster-icon-secondary-4-plus:before,.monster-icon-tertiary-4-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-plus-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-dash:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-dash:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-dash:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-dash:before,.monster-icon-secondary-1-dash:before,.monster-icon-tertiary-1-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-dash:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-dash:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-dash:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-dash:before,.monster-icon-secondary-2-dash:before,.monster-icon-tertiary-2-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-dash:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-dash:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-dash:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-dash:before,.monster-icon-secondary-3-dash:before,.monster-icon-tertiary-3-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-dash:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-dash:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-dash:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-dash:before,.monster-icon-secondary-4-dash:before,.monster-icon-tertiary-4-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-gear:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-gear:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-gear:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-gear:before,.monster-icon-secondary-1-gear:before,.monster-icon-tertiary-1-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-gear:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-gear:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-gear:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-gear:before,.monster-icon-secondary-2-gear:before,.monster-icon-tertiary-2-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-gear:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-gear:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-gear:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-gear:before,.monster-icon-secondary-3-gear:before,.monster-icon-tertiary-3-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-gear:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-gear:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-gear:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-gear:before,.monster-icon-secondary-4-gear:before,.monster-icon-tertiary-4-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-gear'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-home:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-home:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-home:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-home:before,.monster-icon-secondary-1-home:before,.monster-icon-tertiary-1-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-home:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-home:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-home:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-home:before,.monster-icon-secondary-2-home:before,.monster-icon-tertiary-2-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-home:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-home:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-home:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-home:before,.monster-icon-secondary-3-home:before,.monster-icon-tertiary-3-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-home:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-home:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-home:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-home:before,.monster-icon-secondary-4-home:before,.monster-icon-tertiary-4-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-house'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-counterclockwise:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-counterclockwise:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-counterclockwise:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-counterclockwise:before,.monster-icon-secondary-1-counterclockwise:before,.monster-icon-tertiary-1-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-counterclockwise:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-counterclockwise:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-counterclockwise:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-counterclockwise:before,.monster-icon-secondary-2-counterclockwise:before,.monster-icon-tertiary-2-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-counterclockwise:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-counterclockwise:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-counterclockwise:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-counterclockwise:before,.monster-icon-secondary-3-counterclockwise:before,.monster-icon-tertiary-3-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-counterclockwise:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-counterclockwise:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-counterclockwise:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-counterclockwise:before,.monster-icon-secondary-4-counterclockwise:before,.monster-icon-tertiary-4-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-arrow-counterclockwise'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-2:before{background-color:var(--monster-color-success-2);color:var(--monster-bg-color-success-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-2:before{background-color:var(--monster-color-warning-2);color:var(--monster-bg-color-warning-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-2:before{background-color:var(--monster-color-error-2);color:var(--monster-bg-color-error-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-2:before,.monster-icon-success-2:before,.monster-icon-warning-2:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-3:before{background-color:var(--monster-color-success-3);color:var(--monster-bg-color-success-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-3:before{background-color:var(--monster-color-warning-3);color:var(--monster-bg-color-warning-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-3:before{background-color:var(--monster-color-error-3);color:var(--monster-bg-color-error-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-3:before,.monster-icon-success-3:before,.monster-icon-warning-3:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-1:before{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-1:before{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-1:before{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-1:before,.monster-icon-success-1:before,.monster-icon-warning-1:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-4:before{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-4:before{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-4:before{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-4:before,.monster-icon-success-4:before,.monster-icon-warning-4:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em} +.monster-icon-primary-1-info:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-info:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-info:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-info:before,.monster-icon-secondary-1-info:before,.monster-icon-tertiary-1-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-info:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-info:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-info:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-info:before,.monster-icon-secondary-2-info:before,.monster-icon-tertiary-2-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-info:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-info:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-info:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-info:before,.monster-icon-secondary-3-info:before,.monster-icon-tertiary-3-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-info:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-info:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-info:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-info:before,.monster-icon-secondary-4-info:before,.monster-icon-tertiary-4-info:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-on:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-on:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-on:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-on:before,.monster-icon-secondary-1-on:before,.monster-icon-tertiary-1-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-on:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-on:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-on:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-on:before,.monster-icon-secondary-2-on:before,.monster-icon-tertiary-2-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-on:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-on:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-on:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-on:before,.monster-icon-secondary-3-on:before,.monster-icon-tertiary-3-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-on:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-on:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-on:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-on:before,.monster-icon-secondary-4-on:before,.monster-icon-tertiary-4-on:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-off:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-off:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-off:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-off:before,.monster-icon-secondary-1-off:before,.monster-icon-tertiary-1-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-off:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-off:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-off:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-off:before,.monster-icon-secondary-2-off:before,.monster-icon-tertiary-2-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-off:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-off:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-off:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-off:before,.monster-icon-secondary-3-off:before,.monster-icon-tertiary-3-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-off:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-off:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-off:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-off:before,.monster-icon-secondary-4-off:before,.monster-icon-tertiary-4-off:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-positiv:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-positiv:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-positiv:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-positiv:before,.monster-icon-secondary-1-positiv:before,.monster-icon-tertiary-1-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-positiv:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-positiv:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-positiv:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-positiv:before,.monster-icon-secondary-2-positiv:before,.monster-icon-tertiary-2-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-positiv:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-positiv:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-positiv:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-positiv:before,.monster-icon-secondary-3-positiv:before,.monster-icon-tertiary-3-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-positiv:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-positiv:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-positiv:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-positiv:before,.monster-icon-secondary-4-positiv:before,.monster-icon-tertiary-4-positiv:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-negativ:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-negativ:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-negativ:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-negativ:before,.monster-icon-secondary-1-negativ:before,.monster-icon-tertiary-1-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-negativ:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-negativ:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-negativ:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-negativ:before,.monster-icon-secondary-2-negativ:before,.monster-icon-tertiary-2-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-negativ:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-negativ:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-negativ:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-negativ:before,.monster-icon-secondary-3-negativ:before,.monster-icon-tertiary-3-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-negativ:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-negativ:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-negativ:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-negativ:before,.monster-icon-secondary-4-negativ:before,.monster-icon-tertiary-4-negativ:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-warning:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-warning:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-warning:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-warning:before,.monster-icon-secondary-1-warning:before,.monster-icon-tertiary-1-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-warning:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-warning:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-warning:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-warning:before,.monster-icon-secondary-2-warning:before,.monster-icon-tertiary-2-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-warning:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-warning:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-warning:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-warning:before,.monster-icon-secondary-3-warning:before,.monster-icon-tertiary-3-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-warning:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-warning:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-warning:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-warning:before,.monster-icon-secondary-4-warning:before,.monster-icon-tertiary-4-warning:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-neutral:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-neutral:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-neutral:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-neutral:before,.monster-icon-secondary-1-neutral:before,.monster-icon-tertiary-1-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-neutral:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-neutral:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-neutral:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-neutral:before,.monster-icon-secondary-2-neutral:before,.monster-icon-tertiary-2-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-neutral:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-neutral:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-neutral:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-neutral:before,.monster-icon-secondary-3-neutral:before,.monster-icon-tertiary-3-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-neutral:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-neutral:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-neutral:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-neutral:before,.monster-icon-secondary-4-neutral:before,.monster-icon-tertiary-4-neutral:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-question:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-question:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-question:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-question:before,.monster-icon-secondary-1-question:before,.monster-icon-tertiary-1-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-question:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-question:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-question:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-question:before,.monster-icon-secondary-2-question:before,.monster-icon-tertiary-2-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-question:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-question:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-question:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-question:before,.monster-icon-secondary-3-question:before,.monster-icon-tertiary-3-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-question:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-question:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-question:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-question:before,.monster-icon-secondary-4-question:before,.monster-icon-tertiary-4-question:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-plus:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-plus:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-plus:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-plus:before,.monster-icon-secondary-1-plus:before,.monster-icon-tertiary-1-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-plus:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-plus:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-plus:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-plus:before,.monster-icon-secondary-2-plus:before,.monster-icon-tertiary-2-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-plus:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-plus:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-plus:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-plus:before,.monster-icon-secondary-3-plus:before,.monster-icon-tertiary-3-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-plus:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-plus:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-plus:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-plus:before,.monster-icon-secondary-4-plus:before,.monster-icon-tertiary-4-plus:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-dash:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-dash:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-dash:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-dash:before,.monster-icon-secondary-1-dash:before,.monster-icon-tertiary-1-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-dash:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-dash:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-dash:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-dash:before,.monster-icon-secondary-2-dash:before,.monster-icon-tertiary-2-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-dash:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-dash:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-dash:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-dash:before,.monster-icon-secondary-3-dash:before,.monster-icon-tertiary-3-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-dash:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-dash:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-dash:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-dash:before,.monster-icon-secondary-4-dash:before,.monster-icon-tertiary-4-dash:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-gear:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-gear:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-gear:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-gear:before,.monster-icon-secondary-1-gear:before,.monster-icon-tertiary-1-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-gear:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-gear:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-gear:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-gear:before,.monster-icon-secondary-2-gear:before,.monster-icon-tertiary-2-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-gear:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-gear:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-gear:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-gear:before,.monster-icon-secondary-3-gear:before,.monster-icon-tertiary-3-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-gear:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-gear:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-gear:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-gear:before,.monster-icon-secondary-4-gear:before,.monster-icon-tertiary-4-gear:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-home:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-home:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-home:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-home:before,.monster-icon-secondary-1-home:before,.monster-icon-tertiary-1-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-home:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-home:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-home:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-home:before,.monster-icon-secondary-2-home:before,.monster-icon-tertiary-2-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-home:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-home:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-home:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-home:before,.monster-icon-secondary-3-home:before,.monster-icon-tertiary-3-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-home:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-home:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-home:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-home:before,.monster-icon-secondary-4-home:before,.monster-icon-tertiary-4-home:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-counterclockwise:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-counterclockwise:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-counterclockwise:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-counterclockwise:before,.monster-icon-secondary-1-counterclockwise:before,.monster-icon-tertiary-1-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-counterclockwise:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-counterclockwise:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-counterclockwise:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-counterclockwise:before,.monster-icon-secondary-2-counterclockwise:before,.monster-icon-tertiary-2-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-counterclockwise:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-counterclockwise:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-counterclockwise:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-counterclockwise:before,.monster-icon-secondary-3-counterclockwise:before,.monster-icon-tertiary-3-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-counterclockwise:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-counterclockwise:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-counterclockwise:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-counterclockwise:before,.monster-icon-secondary-4-counterclockwise:before,.monster-icon-tertiary-4-counterclockwise:before{content:\"\";display:inline-block;height:1em;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-2:before{background-color:var(--monster-color-success-2);color:var(--monster-bg-color-success-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-2:before{background-color:var(--monster-color-warning-2);color:var(--monster-bg-color-warning-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-2:before{background-color:var(--monster-color-error-2);color:var(--monster-bg-color-error-2);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-2:before,.monster-icon-success-2:before,.monster-icon-warning-2:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-3:before{background-color:var(--monster-color-success-3);color:var(--monster-bg-color-success-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-3:before{background-color:var(--monster-color-warning-3);color:var(--monster-bg-color-warning-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-3:before{background-color:var(--monster-color-error-3);color:var(--monster-bg-color-error-3);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-3:before,.monster-icon-success-3:before,.monster-icon-warning-3:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-1:before{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-1:before{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-1:before{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-1:before,.monster-icon-success-1:before,.monster-icon-warning-1:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-4:before{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E\")}.monster-icon-warning-4:before{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E\")}.monster-icon-error-4:before{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\")}.monster-icon-error-4:before,.monster-icon-success-4:before,.monster-icon-warning-4:before{content:\"\";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/stylesheet/property.mjs b/source/components/stylesheet/property.mjs index 44391984635e9e848e19462b1c708ecb4fc737be..7d0f52917af8ff3142c74382bbe06896b47e4c76 100644 --- a/source/components/stylesheet/property.mjs +++ b/source/components/stylesheet/property.mjs @@ -20,7 +20,7 @@ const PropertyStyleSheet = new CSSStyleSheet(); try { PropertyStyleSheet.insertRule(` @layer property { -:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}} +:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/stylesheet/table.mjs b/source/components/stylesheet/table.mjs index 70b0d0635141758b7db4c49906140fb621bab43e..e9a9aaf62f640b4d70264a5ff4656016239db967 100644 --- a/source/components/stylesheet/table.mjs +++ b/source/components/stylesheet/table.mjs @@ -20,7 +20,7 @@ const TableStyleSheet = new CSSStyleSheet(); try { TableStyleSheet.insertRule(` @layer table { -th{text-align:inherit}.monster-table{border-collapse:collapse;box-sizing:border-box;color:#212529;margin-bottom:1rem;width:100%}.monster-table tr{margin:10px 0}.monster-table td,.monster-table th{padding:.75rem;vertical-align:top}.monster-table thead th{vertical-align:bottom}.monster-table-container{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);display:block;margin:0;overflow-x:auto;padding:8px;width:100%}.monster-table tbody tr td,.monster-table tbody tr th{background-color:var(--monster-bg-color-primary-1);border:none} +th{text-align:inherit}.monster-table{border-collapse:collapse;box-sizing:border-box;color:#212529;margin-bottom:1rem;width:100%}.monster-table tr{margin:10px 0}.monster-table td,.monster-table th{padding:.75rem;vertical-align:top}.monster-table thead th{vertical-align:bottom}.monster-table-container{box-sizing:border-box;display:block;margin:0;overflow-x:auto;padding:8px;width:100%}.monster-table tbody tr td,.monster-table tbody tr th,.monster-table-container{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-table tbody tr td,.monster-table tbody tr th{border-bottom:1px solid var(--monster-table-border-color)} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/components/stylesheet/theme.mjs b/source/components/stylesheet/theme.mjs index 289848d3e43519144e3404096cdf2673d27fc2ef..69e53d4f1eabb1b5a5209533f604d79ec5aa281b 100644 --- a/source/components/stylesheet/theme.mjs +++ b/source/components/stylesheet/theme.mjs @@ -20,7 +20,7 @@ const ThemeStyleSheet = new CSSStyleSheet(); try { ThemeStyleSheet.insertRule(` @layer theme { -.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)} +.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + ""); diff --git a/source/monster.mjs b/source/monster.mjs index 4d65bd9f66b9df2be3d1991e26d1c86f2660d2c4..506fd099eaade03642f104a6ed0a4b78bc4e3d78 100644 --- a/source/monster.mjs +++ b/source/monster.mjs @@ -29,6 +29,7 @@ export * from "./components/form/util/floating-ui.mjs"; export * from "./components/form/context-help.mjs"; export * from "./components/form/tabs.mjs"; export * from "./components/form/state-button.mjs"; +export * from "./components/form/form-field.mjs"; export * from "./components/form/popper.mjs"; export * from "./components/form/select.mjs"; export * from "./components/form/confirm-button.mjs"; @@ -48,6 +49,7 @@ export * from "./components/form/stylesheet/message-state-button.mjs"; export * from "./components/form/stylesheet/button-bar.mjs"; export * from "./components/form/stylesheet/context-help.mjs"; export * from "./components/form/stylesheet/state-button.mjs"; +export * from "./components/form/stylesheet/form-field.mjs"; export * from "./components/form/stylesheet/popper.mjs"; export * from "./components/form/stylesheet/select.mjs"; export * from "./components/form/stylesheet/confirm-button.mjs"; diff --git a/test/web/test.html b/test/web/test.html index c4a13fc950ce5a40607380319e09203baa080c6c..44ff9edf579ae0ef0b6105b3ef109a607ee680ab 100644 --- a/test/web/test.html +++ b/test/web/test.html @@ -15,8 +15,8 @@ </head> <body> <div id="headline" style="display: flex;align-items: center;justify-content: center;flex-direction: column;"> - <h1 style='margin-bottom: 0.1em;'>Monster 3.60.0</h1> - <div id="lastupdate" style='font-size:0.7em'>last update So 24. Mär 19:58:09 CET 2024</div> + <h1 style='margin-bottom: 0.1em;'>Monster 3.63.0</h1> + <div id="lastupdate" style='font-size:0.7em'>last update Mi 27. Mär 12:32:39 CET 2024</div> </div> <div id="mocha-errors" style="color: red;font-weight: bold;display: flex;align-items: center;justify-content: center;flex-direction: column;margin:20px;"></div> diff --git a/test/web/tests.js b/test/web/tests.js index 1332057fa2af5cc790544e4297937ca58de26ca8..3b055633013257557aaedf9b51da32338697d3aa 100644 --- a/test/web/tests.js +++ b/test/web/tests.js @@ -22694,7 +22694,7 @@ ${key.data.toString("base64")} try { TabsStyleSheet.insertRule(` @layer tabs { -:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:"";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}:host{background-color:var(--monster-color-gray-1);color:var(--monster-color-gray-6)}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{align-items:flex-end;background-color:var(--monster-color-gray-1);border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-gray-6);display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4;white-space:pre}[data-monster-role=nav] button{align-content:center;align-items:center;align-self:stretch;background-color:var(--monster-color-gray-1);border:none;border-bottom:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-gray-6);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-color-scheme:dark){[data-monster-role=nav] button{background-color:var(--monster-color-gray-6);color:var(--monster-color-gray-1)}}[data-monster-role=nav] button:not([disabled]):hover,[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[disabled]{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0} +:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:"";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{align-items:flex-end;border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4;white-space:pre}[data-monster-role=nav] button{align-content:center;align-items:center;align-self:stretch;border:none;border-bottom:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}[data-monster-role=nav] button:not([disabled]):hover{border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{background-color:inherit;border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-secondary-1)!important}@media (prefers-color-scheme:dark){[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)!important}}[data-monster-role=nav] button[disabled]{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0}@media (prefers-color-scheme:dark){[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{color:var(--monster-color-secondary-4)!important}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -22806,7 +22806,7 @@ ${key.data.toString("base64")} try { ThemeStyleSheet.insertRule(` @layer theme { -.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)} +.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -22979,6 +22979,14 @@ ${key.data.toString("base64")} const id = node.getAttribute("id"); if (id === reference2) { node.classList.add("active"); + const openDelay = parseInt(this.getOption("features.openDelay"), 10); + console.log(openDelay); + if (!isNaN(openDelay) && openDelay > 0) { + node.style.visibility = "hidden"; + setTimeout(() => { + node.style.visibility = "visible"; + }, openDelay); + } const data = {}; const mask = [ "data-monster-attributes", @@ -23341,7 +23349,7 @@ ${key.data.toString("base64")} </template> <div data-monster-role="control" part="control"> <nav data-monster-role="nav" part="nav" - data-monster-attributes="data-monster-marker path:marker" + data-monster-attributes="data-monster-marker path:marker, class path:classes.navigation" data-monster-insert="buttons path:buttons.standard"> <slot name="start" class="invisible"></slot> <div data-monster-role="popper" part="popper" tabindex="-1" @@ -23416,6 +23424,8 @@ ${key.data.toString("base64")} * @property {string} templates.main Main template * @property {Object} labels * @property {string} labels.new-tab-label="New Tab" + * @property {Object} features + * @property {number} features.openDelay=500 Open delay in milliseconds * @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) * @property {String} fetch.redirect=error * @property {String} fetch.method=GET @@ -23447,9 +23457,13 @@ ${key.data.toString("base64")} accept: "text/html" } }, + features: { + openDelay: null + }, classes: { button: "monster-theme-primary-1", - popper: "monster-theme-primary-1" + popper: "monster-theme-primary-1", + navigation: "monster-theme-primary-1" }, popper: { placement: "bottom", @@ -23489,7 +23503,7 @@ ${key.data.toString("base64")} * @return {CSSStyleSheet[]} */ static getCSSStyleSheet() { - return [TabsStyleSheet, ThemeStyleSheet]; + return [TabsStyleSheet]; } /** * This method is called internal and should not be called directly. @@ -23582,7 +23596,7 @@ ${key.data.toString("base64")} try { MessageStyleSheet.insertRule(` @layer message { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -23840,7 +23854,7 @@ ${key.data.toString("base64")} try { NotifyStyleSheet.insertRule(` @layer notify { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=control]{align-items:flex-start;border:0;box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;margin:0;max-height:100vH;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:25rem;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control][data-monster-orientation*=left]{left:0;right:auto}[data-monster-role=control][data-monster-orientation*=right]{left:auto;right:0}[data-monster-role=control][data-monster-orientation*=center]{left:50%;transform:translate(-50%)}[data-monster-role=control][data-monster-orientation*=bottom]{align-items:flex-end;bottom:0}[data-monster-role=control][data-monster-orientation*=top]{align-items:flex-start;top:0}[data-monster-role=container]{width:100%}[data-monster-role=message]{background-clip:padding-box;background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-message-border-color,rgba(0,0,0,.1));border-radius:var(--monster-message-border-radius,.25rem);border-style:var(--monster-message-border-style,solid);border-width:var(--monster-message-border-width,1px);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);color:var(--monster-color-primary-1);display:flex;font-size:.875rem;margin:var(--monster-message-margin-top,15px) var(--monster-message-margin-right,5px) var(--monster-message-margin-bottom,0) var(--monster-message-margin-left,0);max-height:200px;max-width:100%;overflow:hidden;padding:var(--monster-message-padding-top,5px) var(--monster-message-padding-right,5px) var(--monster-message-padding-bottom,5px) var(--monster-message-padding-left,5px);pointer-events:auto;position:relative;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;user-select:text;width:100%}[data-monster-role=message]:first-child{margin-top:0}[data-monster-role=message].fadeout{border:0;margin-bottom:0;margin-top:0;max-height:0;padding-bottom:0;padding-top:0;transition:all .2s cubic-bezier(1,-.04,0,1.03)} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=control]{align-items:flex-start;border:0;box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;margin:0;max-height:100vH;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:25rem;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control][data-monster-orientation*=left]{left:0;right:auto}[data-monster-role=control][data-monster-orientation*=right]{left:auto;right:0}[data-monster-role=control][data-monster-orientation*=center]{left:50%;transform:translate(-50%)}[data-monster-role=control][data-monster-orientation*=bottom]{align-items:flex-end;bottom:0}[data-monster-role=control][data-monster-orientation*=top]{align-items:flex-start;top:0}[data-monster-role=container]{width:100%}[data-monster-role=message]{background-clip:padding-box;background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-message-border-color,rgba(0,0,0,.1));border-radius:var(--monster-message-border-radius,.25rem);border-style:var(--monster-message-border-style,solid);border-width:var(--monster-message-border-width,1px);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);color:var(--monster-color-primary-1);display:flex;font-size:.875rem;margin:var(--monster-message-margin-top,15px) var(--monster-message-margin-right,5px) var(--monster-message-margin-bottom,0) var(--monster-message-margin-left,0);max-height:200px;max-width:100%;overflow:hidden;padding:var(--monster-message-padding-top,5px) var(--monster-message-padding-right,5px) var(--monster-message-padding-bottom,5px) var(--monster-message-padding-left,5px);pointer-events:auto;position:relative;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;user-select:text;width:100%}[data-monster-role=message]:first-child{margin-top:0}[data-monster-role=message].fadeout{border:0;margin-bottom:0;margin-top:0;max-height:0;padding-bottom:0;padding-top:0;transition:all .2s cubic-bezier(1,-.04,0,1.03)} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -24784,7 +24798,7 @@ ${key.data.toString("base64")} try { ButtonStyleSheet.insertRule(` @layer button { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:host(monster-button){display:flex}[data-monster-role=control]{align-items:stretch;display:flex} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:host(monster-button){display:flex}[data-monster-role=control]{align-items:stretch;display:flex} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -25068,7 +25082,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { StateButtonStyleSheet.insertRule(` @layer statebutton { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -27079,7 +27093,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { SelectStyleSheet.insertRule(` @layer select { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=container].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-2);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=remove-badge]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;height:16px;margin-left:5px;min-height:16px;order:2;width:16px}@media (prefers-color-scheme:light){[data-monster-role=remove-badge]{filter:invert(1)}}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}.status-or-remove-badges{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:16px;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].empty{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em;overflow:auto;scrollbar-color:var(--monster-color-primary-1) var(--monster-color-primary-3);scrollbar-width:thin;width:100%}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=container].clear,[data-monster-role=container].open{background-color:var(--monster-bg-color-primary-2);-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em}[data-monster-role=container].clear{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-1);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem;width:-webkit-fill-available;width:-moz-available;width:fill-available}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-1)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}[data-monster-role=remove-badge]{background-color:var(--monster-bg-color-primary-2);height:16px;margin-left:5px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");order:2}[data-monster-role=remove-badge],[data-monster-role=status-or-remove-badges]{-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.open[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}.empty[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E")}.clear[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.error[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-error-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.loading[data-monster-role=status-or-remove-badges]{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;scrollbar-color:var(--monster-color-primary-1) var(--monster-color-primary-3);scrollbar-width:thin}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -27753,7 +27767,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h if (updated) { this.setOption("options", options2); } - setStatusOrRemoveBadges.call(this, "status"); + setStatusOrRemoveBadges.call(this); removeAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, noOptionsAvailableMessage); return true; } @@ -27877,12 +27891,19 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h if (!url) return Promise.resolve(); const fetchOptions = this.getOption("fetch", {}); - setStatusOrRemoveBadges.call(this, "loading"); + let delayWatch = false; + setTimeout(() => { + if (delayWatch === true) + return; + setStatusOrRemoveBadges.call(this, "loading"); + delayWatch = true; + }, 500); url = new Formatter({ filter: this.getOption("filter.defaultValue") }).format( url ); const global20 = getGlobal(); return global20.fetch(url, fetchOptions).then((response) => { + delayWatch = true; const contentType = response.headers.get("content-type"); if (contentType && contentType.indexOf("application/json") !== -1) { return response.text(); @@ -27895,12 +27916,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h throw new TypeError("the result cannot be parsed"); } }).catch((e) => { + delayWatch = true; throw e; }); } function hide4() { this[popperElementSymbol2].style.display = "none"; - setStatusOrRemoveBadges.call(this, "status"); + setStatusOrRemoveBadges.call(this, "closed"); removeAttributeToken(this[controlElementSymbol4], "class", "open"); } function show3() { @@ -28249,7 +28271,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h data-monster-replace="path:messages.emptyOptions"></div> </div> <div part="status-or-remove-badges" data-monster-role="status-or-remove-badges" - data-monster-attributes="class path:classes.statusOrRemoveBadge | suffix:\\ status-or-remove-badges"></div> + data-monster-attributes="class path:classes.statusOrRemoveBadge"></div> </div> `; } @@ -28609,16 +28631,22 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h if (url !== void 0 && url !== null) { url = validateString(url); } + hide4.call(this); return new Promise((resolve, reject) => { - const response = fetchData.call(this, url).then((map) => { + fetchData.call(this, url).then((map) => { if (isObject(map) || isArray(map) || map instanceof Set || map instanceof Map) { this.importOptions(map); setTimeout(() => { + setStatusOrRemoveBadges.call(this, "closed"); resolve(); }, 10); return; } + setStatusOrRemoveBadges.call(this, "error"); reject(new Error("invalid response")); + }).catch((e) => { + setStatusOrRemoveBadges.call(this, "error"); + reject(e); }); }); } @@ -29068,7 +29096,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { PopperButtonStyleSheet.insertRule(` @layer popperbutton { -[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{display:flex;position:relative}[data-monster-role=button]{width:-webkit-fill-available;width:-moz-available;width:fill-available}div[data-monster-role=control]{height:100%} +[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{display:flex;position:relative}[data-monster-role=button]{width:-webkit-fill-available;width:-moz-available;width:fill-available}div[data-monster-role=control]{height:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -29361,7 +29389,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { ConfirmButtonStyleSheet.insertRule(` @layer confirmbutton { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=decision]{align-items:center;display:flex;justify-content:space-evenly;margin:1rem 0 .4rem;width:100%}div[data-monster-role=control]{height:100%} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=decision]{align-items:center;display:flex;justify-content:space-evenly;margin:1rem 0 .4rem;width:100%}div[data-monster-role=control]{height:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -31114,7 +31142,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { FormStyleSheet.insertRule(` @layer form { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}[data-monster-role=control]{position:relative} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}[data-monster-role=control]{position:relative} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -32272,7 +32300,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { ToggleSwitchStyleSheet.insertRule(` @layer toggleswitch { -:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{box-sizing:border-box;font-family:inherit;font-size:inherit;margin:0;outline:none}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}[data-monster-role=control] .switch{border-color:var(--monster-bg-color-primary-3);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;display:inline-grid;grid-template-columns:1fr 1fr;height:2.5em;position:relative;transition:background-color .2s;width:100%}[data-monster-role=control] .switch-radio input[type=radio]{display:none}[data-monster-role=control] .label{display:block;height:2.5em;line-height:2.5em;max-width:100%;overflow:hidden;padding:0 .2em;text-align:center;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[data-monster-role=control] .switch-slider{background-color:var(--monster-bg-color-primary-4);bottom:4px;left:4px;position:absolute;right:4px;top:4px;transition:.2s;width:calc(50% - 4px)}[data-monster-role=control] .switch[data-monster-state=on] .label.off{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=off] .label.off,[data-monster-role=control] .switch[data-monster-state=on] .label.on{visibility:visible}[data-monster-role=control] .switch[data-monster-state=off] .label.on{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=on] .switch-slider{transform:translateX(100%)} +:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-table-container-1,.monster-theme-table-row-1{border:1px solid var(--monster-table-border-color)}.monster-theme-table-container-1,.monster-theme-table-elements,.monster-theme-table-row-1{background-color:var(--monster-table-bg-color);color:var(--monster-table-color)}.monster-theme-table-background{background-color:var(--monster-table-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{box-sizing:border-box;font-family:inherit;font-size:inherit;margin:0;outline:none}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}[data-monster-role=control] .switch{border-color:var(--monster-bg-color-primary-3);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;display:inline-grid;grid-template-columns:1fr 1fr;height:2.5em;position:relative;transition:background-color .2s;width:100%}[data-monster-role=control] .label{display:block;height:2.5em;line-height:2.5em;max-width:100%;overflow:hidden;padding:0 .2em;text-align:center;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[data-monster-role=control] .switch-slider{background-color:var(--monster-bg-color-primary-4);bottom:4px;left:4px;position:absolute;right:4px;top:4px;transition:.2s;width:calc(50% - 4px)}[data-monster-role=control] .switch[data-monster-state=on] .label.off{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=off] .label.off,[data-monster-role=control] .switch[data-monster-state=on] .label.on{visibility:visible}[data-monster-role=control] .switch[data-monster-state=off] .label.on{visibility:hidden}[data-monster-role=control] .switch[data-monster-state=on] .switch-slider{transform:translateX(100%)} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -32822,7 +32850,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { HostStyleSheet.insertRule(` @layer host { -.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAFJ4ABIAAAAAt3AAAFIQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE8G+46HIU8BmA/U1RBVEQAhQgIgQoJnxQRCAqBugyBmnALhCIAATYCJAOIQAQgBYUUByAMgxwbfaQXaJefmNz0Zol3v60cPeZMpG4HJSjk5qIINg6CGMglZf//n3F0jOGGDRA1rXeIncJIUkNHGn69qMRDU8Zajjs9UbsmtnqnE3v3vqiQmfRQpLkKW6QZwal6s5IUiJNUSUG/OwoDY6B675OjSjkDSSMu2pedpu9vJILUlJd707D+eLHpjYDI4e1uDnLjHHvxpDXGMyduLLn1qt0FCQOyFsJZE1+kJq3T+Ie7BJFINOANbi9vTUzhI7W4GmUL0lWjT/FQQi/m++xuPP02omRHe5pn4DgfNZfn+R9z979tmEeNaq1RxRqHTjTPNA2JFEgrHdo/nt/W/5zbgGCxia6EkViA2FhYGItRmE1ZvVUvqtStb7Mvrd3W7+t2+0XdoTnzzjYbp7mSHLACkhMWgCTL6s0Wv0AUohJfEqE3opPd58ikJnKlo+3uaeSHYJ6fcIcXjd+rKUEsaElTqlUlVRm/N+e/8iP0L5AKozNlJ3/9iBwshM6v5JIUJykgT3fdrOmq6Lcs+Z+q/XsAXFxEEiQIUaKosFn7ctT+7BBS5dqDolJXunbl7rttzD/v384LftJagFFALYPE5A7gnMrZBht4lXqsbZKmbdq0TtOmpmgNiugM2PYBc73Mrjq7GLsoXHcTpt9uPvFDz8eN3g+sxrPQAw6DTFNp/OZI9iinNitZhRmpQOCkdoBdANjVWlavMitwDNJX/pYIAkVwnOP/vW5xzoMw7SAFAKU+Zz/knP/Z9j+OdfrL8Ke2vdKbmphuxJSuL8EUAggHIiBHP+444EDzv1PTQ3YkOcOSlTHmj6Usdfo2L+/jpYe7IHWcQUgcgkpLFR1YTW8CGKQX9b8GFAAAH9to4RHQ6GLvFRri4DiwTzAADDMKDPr/fZ3V/qdgPmkGzKTEmWEXb7Q3ttgTYqo2nP6/+97Xf+F/9JHAVsIIcACBZwRykGT7gCR8VohJcUOOSDjiSbAphMozm2JRptBtUW69XbNFG3IVy2KLok48/Lfsm527IaqBLMuBbOFIweFUd01veL+Y8xWhtzcqTm2CITc5eLJwSI4fYlLYFIVHAs//T53N4/Yx1hKGU+HSqErdpPPns6fqqWJsNbZaClQtjlOLUMshcdoA5TQss4JLc90SxCOMMUK4KP9NshpzpX4vwxKChCASRERE/LKsWRlJwNKAcTnXAhEy3r1KHcZa/YdX58420/iaXmtGhoCAiIiAR23v/P9+KTACAN5hdkC3xUC4ELsggvkR2krEjYSEv0BKSmHChIvYOCAJkKQgyYMM2QoUMzCo16BJ85qAWCCdHek3AB0ODL1Lq0PgTe3hSw2fhi4XhPueuQWEH6xtIEQAbG2Nm5oV54QFP+yKgO2D4T5t/wz2XW92/rpqpLTSIP8qV9vLvOds0NLWyX51K6ofbvPZE1paf7w318C9Zthq7f32bfuL64VZHw514Ysm5lgfNbfG7W9lsUA4EGz723vxwGzp4fRR+mP8Ls5B7KB2eDJXc6xwlG6902ug7AzLA8NY21B2dB/P5qfOV8t1onyL5jZDDfQI5Rg8D98FvHsvclHuJsrdvsJrpc/Tr/gu/EfZJzXUzpWaDj7M7+UP8/8EkAAVaAS/CR+Xs/JN4YaIcO1xHZcUaMMbklrpKy7NfQJKQcURagoGmCW+HA6ENvbg33sl2pIYRmE9bIHb0mA6kk6lN5GdyMN5EbmQhxHKlwMgT58cgw7pdURz7nfMcQfcU3vIczVkdrhX8XHq4012tFOd7kT/a7p7m83WA71F7aO9M+djvdd6j7fxm+D1Pu3z3uirvmuyza53trv93lTb82RT2KaFVUKMNP36BvQMCo0GsEdkL8s+zLg1ExbM0NgCWAxgzf82DG1KXMfc4rjNcQfHKxSCuRuBI5AodDDDkGdV8CnVVEmEMain4Sa0AXTI0RBNpOYALVq1aV9vxJiUzHKWCis6mp0Bukx069Gr74snVNbsoCmkVMop5+pDGaWz2sLDr2iNt+oZO0b36YSIjWcxvnlN0x0VhlYoW4URjXXKyLG3Y3qoLdEazHAEEoVuMl3DDeERVpG/jeTER0CUZEU1motqFoiwJFKUaDFiacSlBJrEjSQKJ/CSFSmSKk161QlkdKeySXYzsdXKi6I9ikNJMtCUKlOuQqUq1VHT1zq6+lzfQNAIa5JpRovWaEP7ZxuNmTjMLBYuq3XUTgNdRDd6Uq9A33cbxAzxDDON0IxaNVaxd//s/ajxAE6JnPbFGZkuC3uaNU8EsDSLZVmxOj1Pd8HQxXSpedkXawbW6wZo8+6DriuQFFw5IpvnJh6/ZgFJK930aEM2XJ3yJB0DHophbqg0urkvMIgYltbGRPcdkd7Vj/NV4pbAba+/E4BjCg9p5Zeri/pdM0CG/7tXZNxVE+6bYavQn6umWwy3FXf6gg+XnAtHDgjkPNiUbqpowvDUvbRlcj5XZHYzV8Ji4Nl1vjsOhrMaxOHxeDwejz/VIHJXn6H0whg6qFOEUqQo0WLE0ohLCTKJ0yQ5LU9yRQpSpUlfZnASBkWplClXoVKV6qibTBtMmQKYYWHVUUftGIt62ldnMH3EpiU0qVQqHbCLxOU+E4/1XLfBEhzKhgUcgUShfxwmDz9G5ERAAHL7FHRKQyrnwuxQf5rhHBEBRIoSLUYszUbc4rtMdpl26Fgd55tgQG8x/fAZ2JzIvGbmlrcXAm3wXKa7ElfPcS2txfq+egfiHGoDMxyBRKHvy3SJ30Q6V8+6mdfZsaFV3eOUKsWMynkhyL1u4VI0L1SJLIxXyYzpLyNqiWz0XTpkaTyn1ZDti90mY02v0tUqtzSCl+qrK7rIuv1v9RD0sgxqGbJoGGfEklE1Yzr28O1l2KewX9N4ADaN1b7L0IaRTXOuy9yiu82pOwHQBC+pldCrOmK0Mg/r1vRYEm3DBEcgUegmUx03G4+witQgOfERECVZUY3m4tmEIvwUKUq0GLE04lICTuI0yTqtFclEClKlSa86WEZ3JJvsFWi7IxKJOBwOh8PhcETrRN3tDplMJpNhRIaiqAiGYRgmcbksy4Noz/rofQL7KcalND0FOW3RGZuOBR2xmVMxkUgkDl0X7uJiutS8bNGaE+v/ZQOwqe86GIIeEsCuovWYfCq2tvpMOBN7MzO68GWXLhtmgW2ffeHp1Mu7qwX5NDwTkpCScefBkxdvfinARIRIUaLFiKURlxIAiZE0rVq65IoUSZUmveqUMrps/z1ZWEZ5YBgGAAAAAACA0WZsd1Cp+Hw+n2/cOlk4rDpSl1K3Hr36jg1CTtwzOcNuCXYNgiDYhotH1ogOLRSux8nil4r2iYav0norzXvZ2nZjZLfaKD+VRgH/fgNmpkFbhgiGiUacGfXNmK49FPvY9tvbcTm75+3fdamW6YStwkdzaCHZcvq0CS4iU5ZmNxLXGBe/rQoHjMP1/QEGVMZFJgbDDJ/5T3eyBcvGPSqTimJcC+YQUjqGv2nC7q3nB0DOqv2G3VvlIhKIW8MRSBS6yZTiNGFX+RGCDHs8PYIdTjdAUAyvQkwSCpphNd20mpuMjQXKBQkWIjQpmJRUKYxKXcLDc6kIfHaTKaOMSc4MsVRYQ0ezU6FLpVuP3tLHuwprYfthiwiHFAWkSpmWRt+6nJ6U18CuyJ85j2x0b0d7N9pibq0lb4NnU+pO7tEULihdUO2hrptgYXCsxBFA3lQ2nmFc3FbRjGBgCd6BUH7qnXBbacjsK99RfIDMAFkBsoO+nZg8P0BBgMIAtQEan9WQEs9MAHNG8554wa+ArnqvTTjpGS7e/ilPmjARPmnsxWkdAARyOL9yAhymx7SGKlk7Gh48vDvNfdg+ITBZpD9gzgMIBwwBk5tmkEXIqqMMaETg/HUe26oLTTp4w4g9UkZ5bgbxEHtCyTLYPHmJUq3uJpqzvSNcumbBdXYQsku1C92N8jTvDFEU0rv817gmqsGjPfRuNjverTDmHCE4q+qbzOjuIIvRaDhzZ1/VJUphhiOQKHQwsZ5TjguAB8CuKr+YIMKewIoMO5xx9e4AEBTDSYpm2OTy8oIoyYoajejUQb8JwD/XB5iSswUighAsRGhS0CgzJzXMCTU1XEZHaTAXTCQSicXbY4VCoRgLExstldCtxZ1aUnlutGhtOQt18/RUdVpkDBvbS4nEoNFoNBqNFidXn0WJLJCrU8CUbqqMhZGpm+F8EbBIUaLFiKURlxKEEiVVLVNyRgpSpUmvugAZhAGlypSrUKlKtbpmA6wrQLcevfqaE7DTWs6YHm0E2dcliWWsWE3nmS7G5b6uGVnPnNuyyWbHwxDjpWk6M+j20eYMLQ/03VMmKm4ZnglJSMm48+DJize/KrdCkVMlKsyImmeZf0GQywJBEFxC/rggCIIgCIIz90bDEwMTj8fjAUAxdS6VsDcs1g8wfYCXrNd98SH8gajk5vuUPqg4XDP9Jm7oGWvGXxSdELLfrsESEsmWXTcM3cLtHFSGbSHBAjcCiUIXJqHnMlOLRBLasnUK2Sux1zqnMB/ZMGOx/zPu8ohDADAAOAACAAmAAkADYHglCkCuLVAiSIKFCP0khWNKPFUwbdyL+sDByegkaJ2WEMtWrE6/4vpW7G6e4mDw0BfxZhFt9GvfhPEAmyd4cMtUqsPl4ay7Guak5t0N52OOwJaBgSNHsk2Nh7qEWZYVq8e+ksxjj3EKSXg8LNilQqFQzE1fv5tvpQQFtFImyLtivTeWkQCk5ZRe2QiJ2ZrLYDV86MBYWX5xAPunk1yntZ2x6abNriXAshWrcfkU63y/j/m+gnzN8I3YtxzfCeOiAPi7Yh1wBBKFzs72WrlifWb3n+sOmkSizXHTXpmvAnOgea+7S8F1EHP8nU4InFY4Q5mWp3BALlesa7Bz4FuObE4EXRniyk8htCOik8vlcsWYIKr4/cHM3XXIccyODsBXH9R3NIBjUsd1fidj0iinH5riZfUODTiFQulzeax7+jHZVyxf38U3xLdr+U7u43H59KegK95Jvwvyqn3IgxLyUG2Y4QgkCv1BTD+IvCMPMg0lVYRBnSIQkaJEixFLIy4lCCT2hm0sEAgEJTDrqb4gJ2JYozSUKVehUpXqbNrZ+Zhejb+5rHrGzccLQhJSMu48ePLiza/KzQnMCEKwEKFJYYGyNyK1ltJU/J6WmFxUqLsInXSs34s4AJnTNP9JV81ZW08bwoxwjMoGg+1gPPxwAMeZkBEE+Vsupsxo9cWS5ivnaSUpFJQ1TEbteyKjMALlSQh6RK3gCCQK3eQU4jbEC7uq/AyCDHuCBQTscMbVuwMUBBTDQ9yQFM2wyRnyESxKsqJGU3RiEDPXL9DZ5F4IpAuSYCFCk8IGZVMFCdOkLuE1IKVFlGgxYmnENeNBCVSJknJEj+SMFEmVJr3qmDKIzGlkSbbd9HLk1fx+3e+VCpmKohglyUBVqky5CpWqVKcaUG3UlfpokMbaxNAsLVq1aU9GIlOfvJlMppjJZDJbRjtaNWk/rzWoMIIaNWesaut03yMO2PxII6MBE91qfoDyxCSwgCOQKHST6QVuDh5hFXlptrgMjyBKsqIaL17GcdkA58A8gCY/32PLbwknCQBANmtCw6NoBrVIqzbtOUsWU405lCwZ1tDx5p1o7TEdJBgSGL777BEjo94ao9ojtK9bv5/hAM8Ra46SjgmdeLzNDMhiUHnu7QmDDBZ+IUFiTcJoHclIkSpN+mZGcTcH5IcBpcqUR0WoVKU66qZ3usegF3mn+bFlriq9BmmnV7Pb7G0RtCasOwKQZEgh486DJy/e/J6Jrz2rvz118Pk8Pp/P5y/9NPJir9gJwylKrUy5CpWqVEfdVFNthrWgVZv2ZISYereBoJdHKeaeg0J7UBeqR8SO1an3pFAMKLwItVSJ++FmniHEsFEQW+pekoM5Hqf50lxBLLv9zCMAZTPQ17n9X5kHFX7c6Q2Jvb+KSIsSLUYsjbhmvJEEWxLHJDXMSK5IkVRp0quOIKOLzGlkSbbd9HLkyVegMBW5UKwkGWwpVaZchUpVqqOmj9p5qlNT3//1xsiARCKRSABABQDAgEAgEF4kcHPA4y/f2m7YGo5AotCVSSIaTeVGFAAlx1RIZRvGc5j0JIeocxzzpKtcaycxI1hSyV+61/GCwuzAMfQMw6LTKd8osFAcrNVDPIeFs6LHFxlNytieDjb8GOQQbhSItj02gIg8OVbUfgF/GtkaCsMMRyBR6D55mcPjLbYkI8J0wJwXf/M1no9djTVdWhpiD4MjkCj0GYY6kY1N5Q4EKgUhWIjQpNCjbKoSCNOiXoZbVF9/zsLdGYGgVbMzwJwz8+mqU2sjY1Brcjl3fG/sfz6q7og2Y34vfpdUhe/CZ2HH8yAA/xQ8D3myAIDNAVsCAJbZnxi2cH5s2cRJwVaOm2WWstPGZxYZA1KIR7mt3AzAmtkFUI5ilDcAm2QwojFXB6r3IsByVq5l+tNabctrF+QrAQ+lkiUWziHGKWc5u1FUdMKMhnxixnAU4lkaAno/nhuScEnHrQ6QEdoR2FIQ4GFnYHkfBgJTwNl42rQH7dV6IBKx4GDIPTSPAtYHcua/UzeP1epZJNatOASqFEQkYCWSjKomcvJ4Q/lYmR6bWiEWWVIFANaITOVw2ZVHzr5MzC/0i/D1kwEWVD/zT9b6DG632iK4UqC7TP2UNbnkEY864XYiKlW+BS3FUKxHDQYo+8B9yz1w4h07Ba4QkkzL0LGJGIrrZ+cNXuB3Pw6cedpAMU6GzRQqDW7ntB+cWisFyo3WCmQjL0MmXoBqNWRFIZI7gDXhtSct8LpBfkHsRQ6XpVfIRvZBU8p85F4hH8EKnxmEYmu+K6cYY3gQe1+/TzJAIRF1cKvNmn2Q0M8aOWsXjT9jvBCr521xqtWVI6apLpehKcxZuW9BWLJ3QGqf9JTiuvvU0wdghw/8IBRIX1VuNQysBqStVNPXZDtL+Nivcwi1PgD/5O0oym2J+78on0rxgA9OCla0gN0JEPHY/YP4nhIawbEJ2HlUnR9DbzfWMPAvxkrtA14x6jrAmYUcgRfRlZnnYxs2y+owLDwkS2Vk3dfjAAUVIJewD06tz+Auw6pIqxTl4dmjoGlYQXDMb31FJPs+67j9RNgsHYgwwOcYtufK6VhCLMuc4NFTbv9pEQjFNjNr0LWAJB3XGHm4x7nBRfXmHQhQ0bzqmOtVTnyeS6x1HbC/arj/Xe/7qMOl7M0eUnDPghyisF8qIoFbhfEgqyD4o3o2K5RLrMJYCaC5grHwupDNsVoXFI3+9WYPa1lwvOp91fvanGhomJip97upNHmOH+yb1+hLIpddr21RiA13Jib79k6pTB3dFAo714pQ1yRZbTXMydA7mQE9RFGhL/OxrHjdRno0Xdf9yEe0nXFfOerzY+DO3fiBWBFMAmqFbOegkAqXTVo5fS66yOIVlLCSdcp68ue4yJelhUPtU6Vm2jnNAPqwWaNnnv1w7JP6xQZawSIPlOFMEUGuzPCBb2dJUygY6Q9wr6JUjJr6NZcbEYwL/cxZfec82LOsMK49xX628P8Nq3TDEcIAPZwwhLw58hPKk5JSoDBJgiTLEStPA50m7SqYmNSx6FNv0iSjU04zmTbNYs4CqzfJflmC/YZJgNBwDAaBi8eBHT5HAk4IQkKuRER2ceHCjStXYhJeMN68Efz4wfjzJxEggJScnEygUAwlJXdh1JyEC+chggYpThxKvHh2EiRyliSJp2TpKDo6W2TIsFWmTF6y5EDy5EMKFPBWqBBfkRICBlVo1apRatSyU6fOVvXq+WjQwFeTJn6ateMwMfFn0cFep04BunTZols3pEcPvl69kD59+CZN2uaUU4ROO41r2jSuOfN2WrBA6E0yZMkM4bw5hwsWnC5acrhkxemyNZsrNtyu2vK4ZsdtzZ7HOswGEwuhkRiM7Tg4EC4enB1niJAQboudEBGRHVyIIRLecD58IX784Pz5QwIE2ElOTqQRXHAQ16U4hC7ggCEAg0YABwoKDruEl6+GqbFNPLWGAxDA2+2mUSNOiBg7t0SkS31oxeMkjrFn2IIjJzjMSUhOukkoEJSijyGgx2Ia/9Zc03b+n8+gqkgS28s756cjUp3zwTr+RPe6SerlUdT5aeuge/AHgBz9F4inwE8q+H4OvIW39FbeWry/BqMvv/KSupi9HkrVefG5Z4IavfjyWy+p4sVXyheVT5nxIq/zbvbjoqXX1Ze0hj0AYFMQZs2BkAgFIGFwxHYNB9Xdamwr3s7/CIfgYZifhT9ga10ywtzdZY/hcneTYa/kiz8KCBorhFZ4g1lXBGGWKA752ElId9aLK4SFNdV329bG7RIIKU4GEvhjr8LU1wjA23s9BmgbGjQ97oUKwqiOvyPZERICKIzA6WTpWQwV6oJle3VTlj5TyPKOjm4NbvOg/T9GVfxNA9hFhQDSw/fRjpCF2W8OA68iCyT+f2H/DG8C6e+m1x/II879NA35rwAA68QWAYglTTAsYACEqeN+6my3wYoA4F+jNoWcNS8OiajQQP7yMFawIjQRgSUMLI0Q7n1RAX6RF8YKIIJUoZ3ygC+Q2QosCktO5luMHGUaE3eLe8Vj0hqpWApIEalOapG6rdW+7qRAFcCeYikA4BPTsLh/wUWfObx9R6U8qfA4SKn5g7YCXASQCQBYN3kA//1N1f/k6S/0Y/1oBr74GXxx+2Nf0u+/7gvqC/Lzz0Ef9ORBqjn1PgLoZQ8b+1Z0c8gN/l/2DWfNmfKpX1037z2Lxn3ltBXTbE5Z8IPvfG/GJoSDy46AMxY2DgEhETEJGSUMToWgpkcxMDJ724R3/eH18SCCS4IkyXQyZMqSr0ChIsUMatSp16BJMyMTM4tOb/nNW37yvv/52Oc+8YXf/Tsu3LLMeT9bdXt2cNevXvLyaPjFDU+NgRcNuOB1r3nDLBIGRyNQGDxOyjmoVIOLh6+UGAwAkoP8wJOOhhbJBNUvhpUNLZqDU6J0KVKlybObXg6tEhVKlalS7luV2rVo1caqVgdvnaMQCcuWXHHV5ci4WUQmUmU0MMAmtgQsBSztF3RbBBewFIAw5l41ijcbBmQp6y3AENt82dAkwjxnz7P78VUUDB/VmuAd+x56cP++vXvGRkeGh1YsX7Z0yejI8OKbFy1cMDQ4MH/e3Dmz+/t6e7q7Ojva23KtLdlMOpVsbmrcgWA07PcefeThh7qddqvZuP+udG21lsTAP+fz6dr1mop+0LJ1TEggS6CuvC5oyAiub013YPMLbYzTbODATX5YEiYycpU5IVcPfJDlJ+oOudsvLOUyCHA0epShRd4duH4KgEpMEOWZGb5EFcMjVJkBUBUBRZkA2ZKNRsAN1+10xK8ti5Lvu9CQOcZwxobtVJYSNYSFI3/ezwiLJdQElVAVqbFfVj7GFYKUwiL2M9cSdgNm8LHcsAIlv3t+pTzikgjS8LhnpRA4yDpbO7BcekhLIRtyrso3hOFbiU29FgmKY5J82xRd8qylsFWkEH/ban8lnDv3Zy5e4DVGiZ3OQRDBD464XnWTmoFDR52uXJkzlfyCRN0jFULeqZVLNQEXmVElDotZNOfizQ4RLbi0K3VfQiuOKOESMFTv13Tvi6CVyU7WxMmKW3UbtDmnI17yX3HcnwjgofoU4maSUlLnIPod0w8yv66oWIMdSiGPUv2tgmA4Eda10FrntQm/elthfwuhAHWKs+Js/3zqtTxSfcZdWvMBkEko2OWd5h8Vxkl1wQ0tWqfXxjnbXTwDw5omWZ5qdvHIDbKYxyg970pJvzAz8n35OLRkfSbdDTpZgNM9lQJm2iU3/H0ngxvH29dAeY2QDQvxZ4zShpQbhAjBmwVbI7F7IvJ7kiN1FJGWNuAn0zMEyRl0h2N17JCKigCPKfy9nHNOtzwnIzwmguvZZ/TMBcQlHAfw5ExHDsXGuFuSeo3yCJnZRb3W7Uf3aNZ73EYK7kOSlVJswYYyJCtcGM1Grj98cnHhkFmu7PdOwn1WzR0hxTnRU8aBJmxqH9wQIIc/fUWBHj8qrISjbO2hPW7lRIaoDJpKp6WrVHb0ol5LnKLyFj2THgmy96ApZ6/lq1iNPY8vwDKz5gs+E/CZICPwcacqcnRir1RzPsnCgQVag5UMrKGJ6y4+yPYZI7yjKTJKSUN4oUT7GTdixO0DkfcTUdmkaBzqPbi5SiKfJaJDDKY1Zl12u1RAOkwSp7zHn6QkaipNLr6E0pHgmIQ0O3xBnWSyY20cuH2zWYxNQ3w2mFwP8xk5cKeDsdUakKlLHNJG8s5xzyhNttEBiRDNQscCl2v2ZAn1CitxMEjLMwG9p1dDtdqiwJTNCfLSqRS0AtVuqQPIsQCRZIm8x66INwpTCMJC2vYHrNMWMw5TxJ4Vi4HgRRokigFKPTpn45JYgxqh0boqguHP6IgkQTKVPp9BmCtySOJd6byE0lQ1dnktlciGUmpQO9tBn6ABRBvYbh/oXapnCC75GGIxl8W+ZZOjoHUhu7NC25UJoLdovC1VoAi2FAXp+M4N1DyAzUUjeSv5wG7Zbf9EcT6jMbsJ1BpY/Jtol7N0jpQhgLhcYfYeUZ2BXqGUH85Q8RRtz2fQdnznllB18dCDM3BM0RVmLXGPFVRjEdQhLP9DiJvpNzoUAveg9ZALfIjTVb4et5vPM9AUVC11JYBMyEpJoLawHVs3A0CND0cg2/xnXJN+IJW4AKf1GSUa3VBcuMrXlUYTugZoOzPfWKRuc8qYMmlOMKwl7x0kKtswlf2ZRsrj1hg2yzqBaPlAaMlkRC7zG4WaHc8ABrly0mDVgPhKg60KIGsln1FFQGoBHY1TGv9KgJp3Voo3OBIuA485orh0c0NG2LX6ySA9sGcBan2QhobgniJ6FetuKSHXLp5ecN1Fi1o3MgMmKdw0IrFhj81KiULDvRJDI5KSUlKAFIKxVzCugUxXpGgZfAgPEE90NezKzpxvHbPTVq2dOaq842EN9uyTzK2FYt+WdQZDe4UbeB18swvlQUCiFrbL+yC7WqlzZOUb2VpYQZu1mPUkT2Xy726Nj0gpUmoEWIer/FJkgkgbAAL4Dh/0lo5JDBMC7kg0DtzPogF0K7LWLXR06PEN0ooHH1lueJkQDPIWU6MZO6La2sgunF508C2lYGZPlcx2XJ1tuXFbre51CIUWShb4foj6LgGcmlg+UCiSixcH9rJ6TTJdAC24ApGbsa5ha/NIr+h9IeaXICiZu8C4JLzWT7gKYT7639+AAjLlppdXALbmt/zcdZ8nfI/swXNbZdw9mR1SO7IfgZKC/4MCwpCw5sD1j40wIubdtpBNcsVHmuUPvhaksxM9F8BLksQ36M/BOJAQt8TBBSUbSojwK32EYbeQrzuYGa9nWFhOKTlQBw9CFj9jTG4J3NgDveuAg1UOhb4KAp9pHgaMJKb0SloL7DodHsLjptXhkvOaaoe0CHjDU6tkKCB42gZJzRDcPo2xNeJrZDxcXeV3V28Jwk0HJhU08LtGDQMqKOP3TGoAI6YnbEkRwDRk3O4ki61InqT812xKbiioBMGE5DLpMKriOpovFLtbIe9xqMq/STYsy0ZQF5yaZavp/a+H7ubDnpSsiBwJFagBMi7wVWc7UHqlmw3fcLvvmnVRSFYRQEngxnHvux8Q1CV7AIAuAIDdAH1A+Lwg+gHgP4C9QLgBANaevOTwoqMHUoNgmVmEyDI7LrxLHDXXEk7ZAMI9zObGyCGDbk6G5UgnTpPc3+jZQMjYGUyuNXg+M/TibI2cBxgJwkb0bgi4fZf5ABCWT7BDSM8YeS/J8no4IsxQYk51wZKm44Cjw6pTfQjXjULv9ejPOVKJ3PhS2iIfulAK6sMLuzY5On/bHzhZDN2GaPh466ZLUUZEmWJ3XRG+8A+v5YOOlFIMRFB4+LjWyuSuSOep3qrPWrNBoRvGDWbgqcu9715kXz2BEMFUZXfhvL9UD/Oum64wz81IksSXvZuIOqcYRCpt+DUigsuE3Q7bvg8z9qEzf8mfeHFn55sJRUuLYxQ3fMHZuO7vhk8M091QxLBZ1Se2iQNV0djEuCFTbnyjeaqNWtDUObqJeJsBunIQ7PKWqvHPPFxEXTMKRjfADc+M9b75WitKeN2TTwPMb0PA9q2FUUGSaLhsljDAUAMMLdKYQHVjcwpgYKowaUQC16rrhxBDRU/aZgbEoUs+A10TxksnkSLjZayyRa+PhKKNjBT8LoSqrqBGiqGSRiF5TBC7h53CioeF4WFMV1zK5jDPobjHgP5a9sBDD1iO84WcL94Co5EdcIkHlNfJtfmmAEt+Ap1Jatw7v5LxbSU3meKCWs13codQUYlJVv+8tmurAGoE1npMhZexTLoPL0kg7Uey2MLEuvM0y45KlwGlWxAhnHfNjZaWNcM6rJbMimi0+szv9BBqOutfPVEjHjIbNd5paaNmbH3FLJvi1tlOxNsotdiOwT9nePO7+eSGFFTz0Tad9YdmA/pJ8qFa5gsfaoisw61Ant8Ovj+242WK3RVr+cyOCGTXTZ7Zq3yHJQLR+qfuSbgPl4UoUnnFMqluH9AP8RiO1kalsxeeHXnkuNIe9+606zih1s8OK86ekMr6qsBs8ruUq6xFH0gUfVsOYan3WStARf7F50v6wduKb0Yv2bsp2vCwSqFaMArrILvYV0qx/Ts6cD9/R0vmb7q+Uj4QJDHfLwqa1L2YSaKe6ocWXT6Eh+VwuaRyHspLtiUMefpJRUYIvdOp5YF+/MhgBB2pfwGjkKccf+wSI+BVzOXLGg1cxW4DVf9HOaaHiSs0/R3dfSi8hdFxYh7MwlF/jyhwDagF/Ce2z0hwwF4X5JbDsFJuAwM0NqtjsGMDCV6GK19hjUADbRN7yGdhOh8uwHL30Gzqylmcv7aIg7QolzPnLwrbjcNv36XKaFZz4i8PVHheQ3oQpaqLJDI3SDkEXLHMCJTZaPKyfQTUWr86qHcW6ZTe5oM7vatNDXkFlckUP6GSUQhVWitF2W719fPOZHe7g8Wr7Fm24y8hHkTmRgV7vjPRXPq4dD80a0aZg43fBV5tWvvI6ABYOgfGuti8i/kqxQuLEGoG1o5fTmm6nsWZrdluE2br0LgkdSh7F1MS5pD0DZDw8UitWKFmusx2H21xD/bm7xxs8OH1liYJSVw4YujwhxS30Bw25B7aCbGtgHZULIm6ueatxeyprVkq+lFnBmRVAd2oUT5CV6PLkXX4kaKbdgTmFhjeso/KjC8ImlgbLyrGK38S7Jjqt1E5aCMiXowa+UPgy3bJ56doHIgxPPgbwJrdWtlOGJ7MCN+05i6V7UmjijhSmI/eodXjI2WxQHjamfVOSPynWDt58boy8yvLN4q93JhpL5pWBnRG6laa1pEV5m/uIApRN7RXnTjIrmnA2sHkZpGcG6ys6ZeWXz6d8nTTftZhQObaBXmLVMVqZkgNDFgDi6XlTYm9cU2WYjpzSSFASBtqqsSoliUPKUfbAD1+pibWZ5yaYzi/fmWsHRXicj/9Np0ZzfiZtJ3111edgfAtX8W+mmv251dfEwFAtqG8tz2yDzLiDtvaberW+JqNbhCxtSgrM6q4slTJS41xaCpBGhppDrriQQWV7Ngdj4F6hSUjmoLSBstZTdvdfhAYnrBjUizm+gwVu8zqhsWb3x/F+5XEUDUTQXQCxwdHxy5vi6YHns28UiJh0n7xIWC35l2sGVQqSLHf1CN7gCQKkeGgR8aTWqW/Blf5KCAQgTmuLCxMzRjjLIsR4Qg3Vjo6+avXtmsCJoZMOkcbzF1KOHGD7ZGyklcWMxseiDsSmUwCSRbxM+OMVYgxKgwvR5ZNMCR41OQuHszuQ1+a7+uf3gMeP3GRGXHM0GOdbGhff7zIaREB+OxvTh098Bs3f/DAY3poDyrQUu6TEHyUh5dtcic+OChQFjeF+RDz4tvqdD9FtOCiA2kfIHvek2PLRftAO8dxYu4e0Liz7WByy+wDxX6ZGurZabruzGzWoO+mC+ZFknGsKTuLzNHCJC5H8gUzFs53WrBVMgK3IlOBFL/BEQWm9jTmcR8UEk0LJ/QEMDfgPHTZCqqWF/oKeev4UR4qGVUS5zxB0NfyrQdnT8wfdEaLtpcj3Jh4Fa/GT6Yc5ZuAi2Djuwc+Ib+nOI7w6MaqO+CvKa0jzaef4DqQoeUIAkdkm5u5nPO7ZmwTzAA5VUfxouS2GFAIMAhA1S+fYYVIpPcXiFLFCjmgeOEwAUdDIHw60PgpJND2OFRFbwIMEaxhpKWW72X7lmw8OYWOFw2dZsn2dNv8Jp+fFI4ZhmT9wZcZa9gSuABTru8hw5k0meCj7Sse9dKggJPRRgUseUVHak+xx8MQ1FGDhMqaulmnPLnAtDYACS9OW6Jexe1F+4w9vJkz5Ux+qgW85jkxwzw5wWAW5mHZyfzORbNMzCOc5jdVphZsUpse+pGgRpxmZ4+Z89i9pO3xxhg5Rh+/4bUCjEph60OP1/GWZrWori7aZWuQi+LZJwYp0bNMefZhwx499in6FJcAK4DmAGTIiFWJxDTzwlHfzfzavQYd4yYMyDSYPCLNmJCzuFFbpo5EuiiQZJmQlrIzkExBGmKp2LTjikiPsKfPvF2JdD4v1E/s2e26sxgCruCB6MyZLbsIP2Td9unM7rsstP2H6FBgUlOB60C/zY4q3Qy0prncAS7JZM812yYdJZL44gIDNu462YRaTzy5HKq7LjxjFOcbxaXZpB0rbZbUPTOb/7qxkfTPOgZ/dKKRgGz7bfIsoQ0Dxv3z983LN4YovoabmNZ2njOKHnZ9sRdTGjJqxIOYMidnJwRZDpkT22ppkdIUNXFSBhXKHGuBh+hl3+j5bSr2XMO7SB3VKaX2BjrOMm14q+RsOGBHswYFNr+kYLzqAM03njB99GjqjkaDxMfOaNrW6E9VMlBilTVxcWRiAJev/P+T4a4NbYqEskdsS4a4rVKLKQJNBJQFbSrfjtBmMoEUKSvjfAlAlYTjS0Rh1NHUtMWHW4Fn30YU0I4I9APU9rwtuN+benlSctiETRYm4g4j7t4AJJGoceokORgQM8z0fH9NLLaSQRE8WcC4FfkasCbZhX6k4sSbGXNNLdIvmQHOBGoGV4tgNK0s93xfAvri7emMAhaUgcGIyyffeXSpbHg9/d8m95u8/t+Tu7/t+7a4Tx/so/e5NPwzspvKRrNTj1zp/k/b/zX2oE///2SWe+NqvgmRdU0aKjwRIv16pE5FUenzb3o75AjgHEOkIF9+GXI9fENYKH9cRkPyqQ1GhPXS+LLGnmX2eG59k5TZuyrFXM9DmT7Kl4LmmRzYYLi5R2fDksKIbfC5rkxgADb6R2uTfeo1/JaJP4Z2tQbv75ibuG9vQa+oM+XauiKaHZs91rIyQW+rBmIogv4YEzh319fdt6egr865dWV564rJ+JSK+G7iU+Iebj/eLxfI9hFXOvExcVdNC95Sxx0p9I/aUz2aVYxXvaq5a9jim72mScbsAz2La0OObr0vCQ9YHdhApLlXa/WMuow+c/+qVv0DyqMpXLJmfELX8EaDbu1xv+EWtJBvooT0a+kW2Olm42Y3AkRmDQYX6PrjZWv92pJkUBNiX6go2dLhe8YjEQO1wyqcv/P2j2ui5H2PyytOd3JOAM7u1E22/FqnfURrdvb04i7oX4NDryfJLRouDI7amrvVq9w+7ap014jFFxqxN/eqV7r82amac7125UCwuUdX6+ilAilkvsWuGAhVqo2O+VOK+dWCfQcZ7SqC+Oq9/rrMPIMzuMSa7KG2FjNgiLck3/+o5VtDN1FxDjRpsixM3jZwywSkCsIrxBGlmexKOuyXSqwX1IwWjKnUaNSrxv7mzqNuTlUUVZq03cla+w/LdBO6W85sUbtIKIYVKL6H7HhWUrOr4CFqZPDxm+/Wh5RPHqX4LRNyIgjPF0eUlDITtHOeqrbun/VTifUKwWihmIpAo14N/p/gSqzg7luj0r7WKKN6OCPxl4XLB1BbwKEGvYwqyzUbO7nNqvrHm7tofqBM0dLndquvdELB8mB5n1zPWOja5JAqSEQrXdCH3PDewn2h+woJa/WSwsYhK9MjWsl067ot3AFDslXn87dShiRnvvma6BOv8nQOmHUQTRwvXW9/D6rQcS02Xj33DbI/vz+fXIbuSpVvVqvH1XfNvXuumhg3Vmy+rQhyjV9yXnRa2b2lLda/jH8bbaUt7N6a4PilTZc3mbljJboyzovcou8uz/uPINDz884ROj6wW210tyO0orFUoPXXNQbk9ZJXGVkroG6ZMy9XUPLa0z6rSgqlgXKlbVBbq40qcX93/t0PcZvskVJltM1OybhvKkytKOYM/uV0sVgTUeIBFWFg2uUO0DfzF9bWBXtjDjvSIHlV282knBlL/b/9Njq4wM+MBgtnEReD5lzWYDS2Gq0v/0Cbm6Ra13wH5A/rktyfLe3Y2s8q9rxb/KurGIjmHHpQ/sa9F+3G1jRlNmYoQw5X08X2fvrTPmKSZDxdjMvUpLJHpDkdBbcxwRT6BxGCBsQx1KrtSTmseACZBx2wkV3jfLTY0IJ6gki7KeQcXugL+ubQj5XPbtDozBmzoctRa+zN2kyQuwYbKX3ncoO0WlkQsI/OCXrcfb7PGHJfyf4TPv8OVi2tsJybYzcbMrgrBOXGJPu/OhmBEJUfjgniGC6J7wgCuGC8xyVRFNkUnd5AVqH3LHAy81wk0uRyJWGdb8j72IC0lc7Nb2sgfM26eUO2Yfbw+1mKSmX0JlPWZGw1UYb6DGkyZSlDesNt1bUXl0Z5o6Efe50AWmxsQd1BpMMYdA4v9PuDQwHXiH96Cb5sMefSBoMhZ8SaM/q/9C6bLC5NGY0pKghZO/32qT0VUAYqHWDGqVaJh8TVH97N0Rnikapdyl2nBJIZVBqjw1CrjgLa6WAzZnB3eYEhosrL5AYIZ2a2cxrnbL/WRiURfdi04Mxs26TsG1OlYv/PH4cAhTogJ+mauEIlie0IArJLJNDmbHMoE0qr/6iLnCSj14d8NH5qaVW9QRAtIou0y7NktuxEXOLUGc6k22D9/Tc2s/jfnRAhJIShjAu+6W214D1QMfEBe8ngI+QkecOmNH/7+SmdMPGdbiE0yatgv7NvGr8KBbCyIAl02locdEe62uvca7us2dcuyfK5yCL1svJed62zLrwS8nR7ndih2RWNBvhSt7opW4s3KGv9J4I4n8fSKCPuXqNAeaNRUCQvNmaVTBBuNxjhNncwixoMGdRzrm8zGuD2zSnzZ0YbujJWkylrM/TYd9YdEoymjN3Ybb3rVrbwXBzpoPWJvB3Uec8715+5sbXCKZNpkCK42Dfkc42Ewq7RRX6fPo25ouf5idGWet88p2tkWqKwhFgJWHMtRrM5Z5y1/67T3CRR61sxX4zUu6MpFDdnrIbuWgfVzanf2FtJKcsn/6rMrSnKaEza0+c+HCpm+rz/ecgTRN+//bVWYwp3haGc3m9dMjtQhxN+2CGIoSpJfHsQwgXjvaRlP3tHCAK0+dO82phQGjeYc9Z9uO4unaw0U+uwpNSOqLRNbdX0NDusmA8OVT0nkDV9JVAF4AFRnM8tNjThtSFZTm9A2l2BNKa35qn2EydIT2J0Lo77oTnQkzad/2sxEUSK/xpArbrulB1gJj35fVGW20MWaVY9WuRm3VIxrebf4tp+5ZKOx5shPVNnJIEuP8cW8YscSh3papJS9rR88PDOLLEGOjcXEb+5a/+lZsl/hG9OgvubvCd/cX2dThVKKA2V6gr5JxwI8ZxACFop9WuuavNt2lQzaaLqFGqvGhTSgkuR8ob+sBYOe/Vdou9FFM956rhQ8MOYeFNAGXiGfGZUObpMmOVLviT5/mM4CbfTrS48jti9f/nJCdcx6S2zNPnJ/LxHtNjrqatfKDKS5M1vZ1Cvff7652SIVp+eQboAvqAMGV6Pr534dPaNps9U3ic9TxKVtn+8SAMzHtlYvvzhry3vF75XYHnoq2XLHv7K/G7Be4U1g4f/WVW/RiHxC70/z6COfv7a5zrh/pz/JL1K8waraObt1lf65A9Cc1+ZI3+U7wGmVYTJoh6Skj1g15cc2S55d8/LwuLYPOAeEIAIBM4gL7oWq2L/yTcOrPLe5YLU8M7O7ts+fBsmVvJ9cNVUEXnq6CnSgDsrEPWRRsDZMJsn++aFW6KYhrGU52oS5Rga5vmVFQuVC8sheYVZFjAZ1Fvj9QnHH9LXeKy+9icTEyy6i5Wzehuh++q71xx7FlHtXMSEJ6ZhheSQ5D5z/UUVi5SLXIlduOy+xEfMC5D0sQzpriXU9Ran/TOJqkEtWHe2zKNyeiJ+5o7i0VVY26zpXwClxcfSZD9C751/pcyYMvC14zLJVexURh/X4nVqUpUIXLdrsAupVtVtfuwZr9gLMPIiRMsVjq9gaJzGrVJCScemwYjfPxABnlTqQFQdjI5HNoe1C5O01ZKigYWBLYBdLNYk/ZdexRoV4SB2fLw1c0XCIvmzq0qryFKBSjiTkfoYZvTo7wsrAMHZfzRA59YjBZW6P10+vspej+EeBZrZ8ued0856ysC5BDfw+1cuEoporaZUl9YVGnLsjRBZExPNJgKB1sZmHl6TaAzY8G1eGWFNG6KCc+P1Io0tq9LHKYXUfZw/f8WRNN73Bfh5kkgeqf8ZWS2Yvks3Ej7pfqi71m5oJMgGI6VN1OF6Mo2/r4lublATRt6pBkBN95ntXYzH2T/PzMV+Yei585xuTT1YS/82V7enNVZra3VS6OGBgC+ysIV+Y3eKXr3AE/AO0s75l9YY0pSLGqlUBkioDR/xVDqt57/A3ak+1TduLuG9aWfSAxqXb47RljWq8YCbDAm3YBAGO6+HOQp5mHMdpjEYu1N4D6NXBPgItolhA+omhcmnRdBRNwsgmuUmf+8yFI2IEHlYbG1ZMQzB0LDkNwHkE7TW4fzu3C0xhzV3b2l61ZAn6BmSKeFaKSMIGKlkeA9x64q9+XNdvn5omY2Wrwz19dcy/tmMfw603OKUrwj1zq5V93Ak86yZRqPFlrRYcqI5pPG8jz3TbDTVWC2tv+8qFqsII7GhZys++T1LXTP3y4/zyLcabT7N7dAE3dTtibjMozykVoKeAGY2xqG6s2KIe7RJag3kTOoMZcD8bnVEJqYF4VrHa6L7iTJpkbMXc0TqOGzKnVGaDU2I1oWpzUwf5ANVYM+gmyE07gRMMh0WIsZyUUmhhunXWZMm5f+/Hbvs08mDKrOrca5asG5iDj7aJbY40XnOsEZcUqwbDv/lfrDbUdWpyXqHatcxbXTTTgbeJ78eXF5n3zyLZPFvrODgnhOBp/vHTaWLWhH6Tdn83fR7stEy/X5v7srQK1XXvF2NaYPRNqRqDBi40f/n6xQl+L5Q7YZ+43pkEN9TzACYmoGucTxSiOctYoA3JhBZyKXVwjucvBo5GHRq1ciKOL/sugT4CGhm+gw7K8EKxzvSvP4xB9YJmWU7Jy8+IpU6DEA1/64RPc0INT63SyMZGwPv38ePs64C7FcLaxu0qc6q6t0Q6VECcELJcKVc2guCII2qlZ9+u/nZ1wclGCNokwDHxr4eRqSHvXzu1OyfpH//z79hBsyzT299bVU4dhl1iYcR5EmvBNNElNI1Aloq1zEUJlF6RNLN0wD88Lfv7p0+Cb4ObJeq2XNWw1u9oAoNIp/mJXwpK/zmh935PgQPZRaNRNJNPpUfvOfeONldhFAo2gqAW8VCQdlWF273DZD6aZNyVm6O7FlfDaryirvE8mfQ3y5LpHfRHAC4eJdE8uvMrTXaGqZDJOrU82saFwjEXfDpjzglU4g/dQM4J6a04jz/1ULcj+Tf/NFTiNWXyuv9HUAw3AveBSMH/CDuyzSHR9MLfQ+BW8sEQtE2EFgmFAqJpdXfh/Sy83WOeye5LFiHgKEpJ3hl/7WBb4F1rl5OWwXIPjKZBx1xoXC189wdvx/izuFdXjqCPI1PVF8COK96j4dMdjkBdKritSHU7ngJ3d/3f7z/J1k8EzT3zxSNBaph+b6y1TW0rFqMKodc+1S1FH0yLqDCAvDpvLg/bUEqtfFfp6pxptlL+KCDTsB11x2Jl4o4L1yvKcm9UuMVYMcv6ZQcku9WOuuOskurb+4cPpVPnt/14ZsbSCdOBeUY5gO3AUe60SLvw+BSsapayreEJ0psZf/3WhOfFHzo7oN+zzzv/3l8jMVprsy8wElWZSqO6IRMduXkT49IpWoKqC6+q0GvcQk1HsalkTwxdsN76vhHrIvAP2YRXZLiNL8rHsXfLJlS3MWwtzHcvDcg3+fmbm9T9v5bH39c3Dj+zLjl2fES16VuvLuooJDX08Pj9CzmcW/u5fB6u4tchxuxRvRzyxVt8bJoVbOumRUtYxrxxnDMw2EzvNx353TnyO96dD3sW/8l+5zWbJ3sKV382XLyyw3KW3Rf4PovPk23MqRcovtyvXyn5iNc+9Gni8DCyWsC9ikjHNTeSzMffFNf7cwcCvEefNZLe8glhmFG4Pib4jtNCREKubnzJV41ummD/8FMWz+FvtGBd3C0pvJd04czRTWa+5hxEZdA8xfFc5rjIuxdA+x4z7Lcy8/2CA6pDgGH8EPlnprDqsOzvIcb8UZFXq5mN1wd5SLjn4+bPxsvcaqINURRo/zW2Ta9pXjdv9f3FkuNWKzozwqgqrxSUXameQaXpSyMYWW6l7BYoZLFneH7r0whm6oCKm7MiGFGafH6f27sKWaXpeUl3Rj1AoWVNGOGFwxYd0lJQLIn/rqxtTOmSsJd3B51hBmzpRoP2VbIVhR9mrRLV9hX3NtoTTFjETWnB+nCk7lOU2vs9SLXZeIikTqfaJaevwJFxblDqvd3vr9DdW7/+6JFAPr/v07r2Q6jQfTQe6LzWPPBjg+ud/4QhHwdNvUfdKPstmxZtiqry7Kyga8YxysobV9Gqttj4CtgtbOGvivrqM7oM6yOslt5ZZh/ksqqhwfABrU9JEtr3KbFfRFP4c2Sm4P57fSuqWVR7N/XRS5ucGnprx5TvQCe/8UoReTqHMjLD8Yr/uaG5Hsnux6RAY92ebxPeL3TzRKJWe73Dvs9HY8CwO4Or3vY62mnpebpbs8dms8UsXEYnoCccgVEj8PQV5CrBKrULIIKlu46e2cByIOW6yZbCrZh/T91Q766QdTqcJWbOio6X0J+1F9d3IGoO3QkB1UhIrLNtJT1/df/6td9P/n906+XFckpBwPmOoTO6HU+XGcIjHwOyLRDHqWnEC0w+ufJ1JKggpEwcjURjuEafdb0yf9LIloUXMCDwL8VLnFYC8TU7qVV+irRry/xWS+NLd01RyBCUTGv92b5XV1JZP5/NTvgHUd1R7fD24WfDiCpM23m13NxJmKx9ukrrlhF7zC6Zrt8+1rfte24Ve4i9Ha0aNUJ+xXLB/WfZfErypctX7HiHz9l5NLmBJ7ATHE8fvIwdjvGd3+CYAjaTkkl3/z3wBVj8vMmzvDAVbasAgKG1OfAjImJ2WEPZsFM2IZb5LdsSL+7BMz5wrvN6RqxSFTD/+W7AiD/TvOIWJr9k8t55Xh+1aX2U6qnlxMzG2aQcLvzGXaft0oOcFWvEV2ZqQrBtDUO4DLKvD8fJiUvP+fthAfkigGQilNAjtBUYqX4/6eFks+uC0XHzqdKW07yNkJTznu2+/RG6DHgelabm3z9bUd5Xzq42tjZY9pSXxksd/7mlstmHvG+O6XUe2IBMzlSz8VxT8UFkh2eQyJ+3tf/G2JCleHsbzP90BbRnCau9Amuc6ZPGCRXpHPDlNc9SmYz1PKQn1yebh2hvMpQtfbIwrpqNLTG1Nll2hxvsG3qaV9Lbaw5+dbGavQpN1sHOyu2wJLf5VK+UOnpHT2ooxv4qModVWgJH7BNgZHeOvtfd/stKINrcnVSzNxCupPQkAP34ysTnQNmt7VbZa+3UNpYgj5ZHjBskKK0QQttzxdXXpx8dcODrtJvB3YtX39G6f1TZY/bVfZE/oiJ7sUDLlt9t/KZDc15r/dkeuMb4uCuV49ZEQykn2RYMtm9RQN/l3WGABXkFL6IoHf8n6dvAkhGLyh7begvhc4USCoIcPneqaeXXvggwAedwt2wI645DXnK121HhYByjVK06NK4/48aLvoXUy2t4Spe/kV2z/TYWqqj3bA2GjGs7Wjbo7HYOmrWoCUSPbN2uCVRsW+ESDXrRvx+ciSZGtX4fb5RKqUd9nntVBp+9Ix0YnEJbUUaKWVNHcXUK8y1nZR7io9DLPyfPSyXTCVx174nqll49okb3awILKhuPaLWPXXNuzu92uHEOaJ4+ej5va+NqF5DxmQ0KHtyxjnj06p5B9a94f3ap6o/MVUavf0zWPJA7hJ8KYec5eWTAvhM6kVJ8sUziIDMvKXUb5B+JJW5t9JRmfQoTh+tZn14oop1tLGteGZ7U9O0mc5lydWbAzYXbdx2p+pO/C8zSQVGjO/B3tlD7O883Fk2NqVWHpppWpnEk1n/mpZoV6aJdJHmO7O9QVJSv0hta7CU4Jtycbgt/mlDrf4UZ8EPgKUg/CcI/gGDJfWN7Eke+wSb9TuXN1km3CBeC7I5nt4CoDAlmi4Q1DN8QXdvAVg4207x9ffBIrio/rs/K1xaV6Rs9xs7XzkoSC3jQymBoAnc0fMGpBhhprPetvx9rrdXszme4QKgsJ8YPr0aabunqgAxMQTQDv+NPcwxj2OyM6du/3fnmj/Gv11kPQIBfNBcCwKTw3UgS5wFrAAdRxVwRgW8qQIuh1tHKlOkr9rYy18faowiW2sg67YGL1jJZMJUwocq4TuVyB2/7QKK7XQboPGwBqLWQD7WQL7XQH6zYQ0II37o6+2gaAH7123d37c/PDdcK0IAh/ubEXK3CWwHp2EyPOybH9rYmf0B2PshAPMsSHZmcev4Fsfuxf39xf2zV//7D4sXkbgZhtl8qwYOqIEH1GCf+8EfL9NqM5+GzVf2n2/+MEe0mUetZcBe/SHockYccJ74Brx6dRgAoD04B070qchozYLkWob65a5v8meWJmomAGpwmPIfQBgW5O8WajAHvo1dv/yi48b7bfwTPZ3sxAGv/aeoYQAgvl9KEwDs6R640fv1wbHxS9H+T989rSrNbq3nNL1fHlwA+ERDOIAfh1zkwRVHWguPTmEfWK//3XtN70cezqXbRH//s6D3b3+QszzslNJk77d9GxlsTCHpxzI8u+/T7784QtW8soH3Q+jJBHCR8kr4RyA+f6uDMz4McjYP97Shv9HCnp8Kf3iGUgvbg/dDuNDxSaIAKMT/21cZ8KD8DL3xuThFcW2i4p9V7hXLW0BVH1yHl4t7PL2/lQuouzhX74rwhv0akbKnp897PNO7FHzjoiuWlFNes+P/sBbP/2KnHdz8umvrPZSxFbLiwVxyDUoxpRk3l+/8zMePh5R1GAcA7srV+4/pAmJX25Vsi4gvAwqxWDTaEFJuyDQ2EcnWXqlKopKpuanRADTAhZO07XZbKjkblnWp7R3YaANTPb4pGTdzuUOqdY1Wie8mD3jocT06UywQAUlA20YBoKJlXRAJDMlNkMZ7ySotZEQjQI/EUclWldWOXVRmCleOgrYWVI1BL7mb+72e0dNrsL0C4dZs3oEKhaxuNsnBEbFxMkSER++ZjLZHYhJVV3mxoyVRaUT0qjovregcVdRsXjkmaFFtEeJljeQFVQpmU04QcbCHjAz1iUIawvlOXkO6LR6kXeomXMojZRNV3fqqx37Hh7fUegDVC1+ZqEwlq663zcy93q574+quAr0ttBUqf+JtjFipc0Ba+yl5a8cm7YzNrKNA+IQFO3pf1frVbe1DSphNWRtoHeJNhfsXReexqvsFqSfU756E1iyrsnBZWxpYaGYmIRKvWS7z7Og/7i4gdm4JDaRcmhjrK1M6N/RacmOJhGhl9Y04HKxkjZ/cGvKCnArtduwIdK1IRihWtsvob5HYWVahCL57iZZS9SUq+DTH891uAIjylVenNa1tSiGbHSn2zXlnp8uqd7nqmPmnCwXmx21X8uPHxzgfEItEy59tt9+uv7LXdlPoy5l671l4MAJ1o5WoKIF2F+6XZ1Tt62LN5guxWWWlEtMkxPfdvNxFrYgR121Rl2vasoD8eg63sF4tQ7lQeGxbPeLMCTiqr1wDL+vSJfV2+6MXfW9cEMPK0L/87kEi8Y2rb9VDt+P9GyLv5cBWJ1ou7cKdExWer8jP4wvDSs+z6BuPaGKOL/CmliSa4byiLug+mRBRRfBAN7GSZ02C4XH8epdWr/CB8gbUZUpeSs5xNQDIOYVA1EmIeiKXWKZRA1VGTCTxomOogOjQDcfX+z1rlOyhnUwtEPZiQDSlSQ0XHOV5si9e6Z3q69BntC2+6vPoPvC+4+0VbTt4/1/8wXIxG46mE4wn0Hi3/XAQpiLgAFZg0Lj5KH+1XBrHQnphTZ0v+3OjIp+6b0gs6uoSE7qVwju3teh9J9BOXc/CwDy//aUmFqlFLMmH5lU1R9hRUw4SaI30qFHWAnmmSlqo+atuG4XssS15zf1Ssyl5bZ3b4pFX87ayAcdmcZ+zoehzzoXEdaQSZkooLvmV4Lmzux6vEwW7RVCEtWt3dAUK3fFiZ1adi6VOQXch6mzGzz2hzjfMKQqTjij2u2apjiTPraRGJ77aNjTpcd6gPJBWAP9XtapcWP9x+jL8jdPPza/wqiNufDAw63bXKklrmsAe+QU8JfyfA2vqF+RP3Yn13ehh5+u5HrbMRIYw9PLtoX8wOYG1kXeC4ea9Z02M3aMaunz9cnyavXr7LEQPHq+qphiJHy0JgJgAyszomz3TllYBCdbIvROcUeLgNZLtLOpFprX04WKOgV5Aliw9ex2bM2wfnY+nNvMV/ivu/hOzxFHVblJDWaNJ6SRluVG9sVq0xrVEXTfUKBuMq6gPQXdUs1IyVtSwJWxvhd+inXQ9IC5KhxHLMt4fnJosutYMtqXALBvnQFQBmHOWdlVr+DTPxlIgd2GMq8lhP48RDXOuEQMZi89+YicSktgJILnmLh4Oh0O0eMqzdo9byofwmO37uhPrJIdcL72sE5x8zqioVYmkxVFFa5/blao3AKgh/kEOAmPux5bDNOQq1bIKwUmJhiYHC3CcmZLvkWFVkQ5ZejnE9cB/sCIi4lU0kY6etRUNaXuoQLytJ0Noy2oMCgrLiJCdQR3DBOf+yxUCjvLfQFbEea/Tl72SuNOuplT+nBtaWgrlyzNcROxsbX/TFdJy/2gxPa3oU2GpYbChL2v5H2ayINWNQL/zmKzYqUCsrV2asreXRL7/cl4aT67SMTAxEfJLwhOhNhXOJu/p0wN/vCVMqCzxOjfN5eLRLOCKIc+Mr1xe6fAwbFsW4L4c27m+atoAdATbpl/N3RJgbB0nfM26LfuKkPRsDSEA0VMTjdDXY7J4f78+YF/P4+shV+hclZTGfyPTm90uVKPRcBhutK5CKWYe9pga8cuCqRjhcMo5xNh4QcY6JR3ak5Y41m5SRB4WFFUtsiqAUjUSMBZ67PcMIdBMa2icFJ7U7j1Wsf1OayGcqzEzC3iAWUa5CjWac3iv07CSJRImGFPbid3Or5WCwLf2+4J2LsbU2UFhVSwTrFqDzIc4CmBNjJDWlVbTaDQa4mYkXpdskyJ3dTUeT1xGtlTIJuFMOGnhOlHKkhNEGhJz9Bl+jAlDMCoDQmqZzBWyUVSIPHVc62QDZg9PHNwFZTDEkIklmgQiYLBQkD4HY9VorKtaAoSLKAFpNcZUShmwIO2slRWTNjWmVlB8f4RRvuFexwoqQ1ZkBavjhuJi3godyfDJKwLzAFDvohaWhDRiJ92jTown936tuwTi3JlYlMtwOCyt15vF1aBlAmZA82otOdIGCx0WQJoOx6/3Y1nZoffnlDlo3b/H9r0SIDLmwYOuJc9daf2tWRKALa3DV9pBGLtmbva3pC4aJ60R6XqbGa7R+/eT/d5Qqn+o8odY9WC+puyV01hiCHwco24UpVF1HR0Smv14IcqUsNBjpYraXopBF5Jah6cqOk/JaFXmp8lk0JaMghCkFBvQDPzrFpQuAOIsaY2v92Ywp10gNFEpcrdh7taeMLRtTMkxGyUxSVVgFSmXZaNPsxsY+IZp8JGkxpObAF9Nd0aW0PPwnrr8HjCbBCt7pcrdNy+H28m6Q+pXj48+UMHKC2FNj2Q3ef+3aRqHuRD+mb/5Sefw94MaMLCfGVZZCSf6S4+Je/PhB+SmK1JfODU6E1ZUq5Mt6vWc9zaOU9Vlkgvq5IzheXqLhY3p9dMP75o//cXhLGefHezaK88zJV1f8/55i6r69eQfZXD31l74pObjerPZfRk3c4fx/LUxeYgtbM7uw/1qoe9zbYnp+TyMB7dW09/BdyzKbqteKHksGlyQUFbKxd7NNdxdEkZAABA8ilMPGzvRSgGBEDzYMXnnUFzRTHUSgNZ7VUT6keAe25pqf9QX1f84sWDiI9PHEbU4ZWtLYLPET6V0QNm9el9i0LQ9He94QvClunIEGiRcRmpPmZQpDQnmF6khAAPxvx9/33//98LH/1tSNKIfAMBa+w8Z5AF8PG/9s6In+e5sDgGgYAAAEMC/H8gjt6vr/0a9U77XX0BoKBVCeo7g3YSNt6vVQ6Wd4n/wleq9QlZNZm1Izy/2yucL/AoIRy4DpfuMQ32wJMrP6CLPUDfh6ueBllrhRfAb8IN5W5eSVcapO+raPi+xbzrfXazo7Od8/7LY1Q6g/56l0peZBAqo/r4t4F8y3+hiCGe4nkAj0+XWUgku/mycfV2vxE0ZDvq7T+aUthOUzVf9OJAVWAmAry5vwD4nzSOfeY2dpUtt2+aAfZ6qd0NlLsc4+4k4JWFvf9QTqvtGLeRjZhOC9xZ51cL3sID9Q5UjZdux2wWqkKptFGUILZlHLwrZIT7FUJcipBD8fKE9u+8/4i0X8tvbvOYE3BCPjbHlHjtmItkxvisi2oEufJy0IQYNzD26o8+K0bFsl4vY/uIJQHYoeN8+WQQ6dwJPS1iJwk+z2FS2pye6rc0tbT3B81Lfh2S7hhfUmrFyLq0EomiIb53+YKVe75LMdAwDkJsCc/0SCsTsxU+YWm/KeufK+WjcsF7ZZFzbhTEj3pn5yxUtD5VWDssueCtic/C2MdfI57zI9r2QHuNSfL28Jylz5dk7EnIRP0vtXwxvO2DrMvarxGJEq5XXLL+LF9RxwelIdhNx0bTHtJoRPRKUTinylZIE4E9XnaUTQDgoxB2MApAnSkNK5J7u4SvBtnO/sme/3t00AubJ/MHfR+k8ZEcFygMABNCQfrQ2FIwDtTsB+h8cg8MBCIzDoSYHAJbBtwbE3Xsc692/NODUrjYlGkg7F9JAkU7XIKBYW4MD3p7dz9HMMrsCArAr70I+foac3VeQ8LX5RIJ2Rj3MGtVrYCVG0tA6KNWwodreOpVa/njXU6yHWJxZuybJ6u6gU4d4w17azEJMoV8r4wD+ykrkoEZ91FZq5HLx9iXoAw8+HDAIM2pqWXDwzofXPNwbsg2fR+9k6yKFgLsHJkX8QpfmjVcdYmFSgNxer2OZYgoEDZKB9X1msmRKEnlrIDQNQPlAUDYulSfGWMcxeIefeqMI6vBC1axw495vIbfwBWHwxVUvUIyWjtTwW1Tg+cZTDb19jarp+fVVEgp5fX7s40K8Njnqrjn0tY21FdMb7YopiU1xVWKVPyaxyKck5lRNiG2EbRvgUikoTg91SXSgbBJcbS0wa6QBpiRqmU1IpaokKi5WMZGNirpGSuGURCZQpTWqhK+KeaqIqwo58QKaP5Xh0dFWkalxcFvY/PW3Qrr6w9dc13alJm27rivt2lwVhV5FIlpkpaoBEVZ5YVaxEFXaBNa/tpjfxdZezutw+Dc+IP/J/4yy4NzgrgbIwX0EGbVCZaWwlrSScj6O/E0+IBFh0d0i+45v37dmNZXK9TXwGv8MfPbetCx6XL+ApClDW/HjNiK+7vrq1Ss42128bbG/MviMc5Go5Jc3KmddZ28o7EU7VrCGBPZ4NtL89/tlXF0bIYmNIwBBAQ==) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} +.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -34437,7 +34465,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { OverlayStyleSheet.insertRule(` @layer overlay { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form option:hover{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:1px dotted var(--monster-bg-color-primary-4);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-1)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3)}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin-bottom:1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin-bottom:1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -34677,7 +34705,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { DetailsStyleSheet.insertRule(` @layer details { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -34704,7 +34732,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h try { CollapseStyleSheet.insertRule(` @layer collapse { -:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.4}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);font-size:1rem;font-weight:400;height:0;line-height:1.4;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height)} +:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-table-bg-color:var(--monster-gradient-tangerine-1);--monster-table-color:var(--monster-gradient-tangerine-6);--monster-table-border-color:var(--monster-gradient-tangerine-2);--monster-table-hover-color:var(--monster-gradient-tangerine-6);--monster-table-hover-bg-color:var(--monster-gradient-tangerine-2);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-table-bg-color:var(--monster-color-gray-5);--monster-table-color:var(--monster-color-gray-1);--monster-table-border-color:var(--monster-color-gray-3);--monster-table-hover-color:var(--monster-color-gray-1);--monster-table-hover-bg-color:var(--monster-color-gray-6)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{box-sizing:border-box;font-size:1rem;font-weight:400;height:0;line-height:1.6;text-align:justify;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0;transition:background .4s ease-in-out}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height);transition:height .4s ease-in-out} }`, 0); } catch (e) { addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + ""); @@ -39628,7 +39656,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h if (monsterVersion instanceof Version) { return monsterVersion; } - monsterVersion = new Version("3.60.0"); + monsterVersion = new Version("3.63.0"); return monsterVersion; } @@ -39636,7 +39664,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h describe("Monster", function() { describe(".getMonsterVersion()", function() { let monsterVersion2; - monsterVersion2 = new Version("3.60.0"); + monsterVersion2 = new Version("3.63.0"); let m = getMonsterVersion(); it("should " + monsterVersion2 + " is " + m, function() { expect(m.compareTo(monsterVersion2)).is.equal(0); @@ -51040,7 +51068,7 @@ buffer/index.js: Copyright (c) Peculiar Ventures, LLC *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3NlcnRpb24tZXJyb3JAMS4xLjAvbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aHZhbEAxLjEuMS9ub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9mbGFnLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL3Rlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3R5cGUtZGV0ZWN0QDQuMC44L25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dldC1mdW5jLW5hbWVAMi4wLjIvbm9kZV9tb2R1bGVzL2dldC1mdW5jLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvdXBlQDIuMy43L25vZGVfbW9kdWxlcy9sb3VwZS9sb3VwZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9jb25maWcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vYmpEaXNwbGF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE1lc3NhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVlcC1lcWxANC4xLjMvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2lzUHJveHlFbmFibGVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZFByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvcHJveGlmeS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9hZGRNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGVjay1lcnJvckAxLjAuMy9ub2RlX21vZHVsZXMvY2hlY2stZXJyb3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaXNOYU4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvYXNzZXJ0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2Fzc2VydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9kb20tc3RvcmFnZUAyLjEuMC9ub2RlX21vZHVsZXMvZG9tLXN0b3JhZ2UvbGliL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbEAxLjMuMTAvbm9kZV9tb2R1bGVzL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dHN1dGlsc0AxLjMuNS9ub2RlX21vZHVsZXMvcHZ0c3V0aWxzL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wdnV0aWxzQDEuMS4zL25vZGVfbW9kdWxlcy9wdnV0aWxzL2J1aWxkL3V0aWxzLmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc24xanNAMy4wLjUvbm9kZV9tb2R1bGVzL2FzbjFqcy9idWlsZC9pbmRleC5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvYml0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL29jdGV0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvY29udmVydGVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2hlbHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3N0b3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9kZWNvcmF0b3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvcGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L29iamVjdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9jb252ZXJ0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNi4yL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuNy44L25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNC41L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvc2xlZXAubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vc2xvdHRlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9zZXQtb3B0aW9uLWZyb20tYXR0cmlidXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmV0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L3N0eWxlc2hlZXQvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9zcGxpdC1zY3JlZW4ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1zY3JlZW4ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi4xL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi4wL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjEvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjMvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90b2dnbGUtc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZm9jdXNtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L292ZXJsYXkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4Lm1qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9zbGl0LXNjcmVlbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanMiLCAiLi4vY2FzZXMvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2dlbmVyYXRlLXJhbmdlLWNvbXBhcmlzb24tZXhwcmVzc2lvbi5tanMiLCAiLi4vY2FzZXMvdGV4dC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy9tYXRoL3JhbmRvbS5tanMiLCAiLi4vY2FzZXMvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi9jYXNlcy91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uL3V0aWwvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvbW9uc3Rlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGRtYXAubWpzIiwgIi4uL2Nhc2VzL2RhdGEvdHJhbnNmb3JtZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGlmZi5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGF0aGZpbmRlci5tanMiLCAiLi4vY2FzZXMvZGF0YS9waXBlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L29yb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc29iamVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2FuZG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L3ZhbGlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90b2tlbmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZlcnNpb24ubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2dsb2JhbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3V1aWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lzLm1qcyIsICIuLi9jYXNlcy90eXBlcy92YWxpZGF0ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi9jYXNlcy90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvc3RhY2subWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi9jYXNlcy9pMThuL3RyYW5zbGF0aW9ucy5tanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHtcblx0aXNJdGVyYWJsZSxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3ltYm9sLFxuXHRpc0Jvb2xlYW4sXG5cdGlzU3RyaW5nLFxuXHRpc09iamVjdCxcblx0aXNJbnN0YW5jZSxcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxufTtcblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiBjaGVjayBpZiBhIHZhbHVlIGlzIGl0ZXJhYmxlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmUoKWAuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHZhciB0eXBlO1xuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdGlmIChcblx0XHR0eXBlID09PSBcInN0cmluZ1wiIHx8XG5cdFx0dHlwZSA9PT0gXCJudW1iZXJcIiB8fFxuXHRcdHR5cGUgPT09IFwiYm9vbGVhblwiIHx8XG5cdFx0dHlwZSA9PT0gXCJzeW1ib2xcIlxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgc3ltYm9sXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTMubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0cmV0dXJuIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYm9vbGVhbi5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy02Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3QgYW5kIGluc3RhbmNlIG9mIGluc3RhbmNlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy03Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHsqfSBpbnN0YW5jZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBpbnN0YW5jZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYXJyYXlcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBmdW5jdGlvblxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy05Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGFuIGludGVnZXIuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEwLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Jvb2xlYW4sXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW5zdGFuY2UsXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcblx0aXNTeW1ib2wsXG59IGZyb20gXCIuL2lzLm1qc1wiO1xuXG5leHBvcnQge1xuXHR2YWxpZGF0ZUl0ZXJhYmxlLFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlQXJyYXksXG5cdHZhbGlkYXRlU3ltYm9sLFxuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBwcmltaXRpdmUgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNQcmltaXRpdmUoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJdGVyYWJsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVByaW1pdGl2ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSkge1xuXHRpZiAoIWlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBib29sZWFuIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQm9vbGVhbigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUJvb2xlYW59IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oZmFsc2UpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gIHZhbHVlIGlzIG5vdCBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlKSB7XG5cdGlmICghaXNCb29sZWFuKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBib29sZWFuXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3RyaW5nIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3RyaW5nKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3RyaW5nfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUpIHtcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzT2JqZWN0KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3Qoe30pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVPYmplY3QodmFsdWUpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgb2JqZWN0XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IGluc3RhbmNlLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSW5zdGFuY2V9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKHt9LCBPYmplY3QpKSAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoJzInLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKFtdLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSkge1xuXHRcdGxldCBuID0gXCJcIjtcblx0XHRpZiAoaXNPYmplY3QoaW5zdGFuY2UpIHx8IGlzRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG5cdFx0XHRuID0gaW5zdGFuY2U/LltcIm5hbWVcIl07XG5cdFx0fVxuXG5cdFx0aWYgKG4pIHtcblx0XHRcdG4gPSBgICR7bn1gO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiR7bn1gKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGFycmF5IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQXJyYXkoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVBcnJheX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIGFycmF5XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3ltYm9sIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3ltYm9sKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3ltYm9sfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3ltYm9sKCkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIHN5bWJvbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xuXHRpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgZnVuY3Rpb24gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNGdW5jdGlvbigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUZ1bmN0aW9ufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbigoKT0+e30pKSAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0ludGVnZXIoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcih0cnVlKSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoMikpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyKHZhbHVlKSB7XG5cdGlmICghaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb24gfTtcblxuLyoqXG4gKiBAdHlwZSB7b2JqZWN9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgZ2xvYmFsUmVmZXJlbmNlO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZW52aXJvbm1lbnQuXG4gKi9cbihmdW5jdGlvbiAoKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IGdsb2JhbFRoaXM7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gc2VsZjtcblx0XHRyZXR1cm47XG5cdH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IHdpbmRvdztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJfX21vbnN0ZXJfX1wiLCB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0fSk7XG5cblx0aWYgKHR5cGVvZiBfX21vbnN0ZXJfXyA9PT0gXCJvYmplY3RcIikge1xuXHRcdF9fbW9uc3Rlcl9fLmdsb2JhbFRoaXMgPSBfX21vbnN0ZXJfXztcblx0XHRkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21vbnN0ZXJfXztcblxuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IGdsb2JhbFRoaXM7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZW52aXJvbm1lbnQuXCIpO1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsVGhpc1xuICpcbiAqIElmIGdsb2JhbFRoaXMgaXMgbm90IGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBwb2x5ZmlsbGVkXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAcmV0dXJucyB7b2JqZWN9IGdsb2JhbFRoaXNcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuXHRyZXR1cm4gZ2xvYmFsUmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgb2JqZWN0IG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtnZXRHbG9iYWxPYmplY3R9IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtvYmplY31cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IG8gPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIG9iamVjdCAke25hbWV9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdHZhbGlkYXRlT2JqZWN0KG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uIG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxGdW5jdGlvbigpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbEZ1bmN0aW9ufSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGNvbnNvbGUubG9nKGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtvYmplY31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEZ1bmN0aW9uKG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IGYgPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIGZ1bmN0aW9uICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVGdW5jdGlvbihmKTtcblx0cmV0dXJuIGY7XG59XG4iLCAiLyohXG4gKiBhc3NlcnRpb24tZXJyb3JcbiAqIENvcHlyaWdodChjKSAyMDEzIEpha2UgTHVlciA8amFrZUBxdWFsaWFuY3kuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIG9uZSBvYmplY3QgdG8gYW5vdGhlciBleGNsdWRpbmcgYW55IG9yaWdpbmFsbHlcbiAqIGxpc3RlZC4gUmV0dXJuZWQgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgYHt9YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhjbHVkZWQgcHJvcGVydGllcyAuLi5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5cbmZ1bmN0aW9uIGV4Y2x1ZGUgKCkge1xuICB2YXIgZXhjbHVkZXMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgZnVuY3Rpb24gZXhjbHVkZVByb3BzIChyZXMsIG9iaikge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIX5leGNsdWRlcy5pbmRleE9mKGtleSkpIHJlc1trZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gZXh0ZW5kRXhjbHVkZSAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICwgaSA9IDBcbiAgICAgICwgcmVzID0ge307XG5cbiAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4Y2x1ZGVQcm9wcyhyZXMsIGFyZ3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG59O1xuXG4vKiFcbiAqIFByaW1hcnkgRXhwb3J0c1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gQXNzZXJ0aW9uRXJyb3I7XG5cbi8qKlxuICogIyMjIEFzc2VydGlvbkVycm9yXG4gKlxuICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBKYXZhU2NyaXB0IGBFcnJvcmAgY29uc3RydWN0b3IgZm9yXG4gKiBhc3NlcnRpb24gYW5kIHZhbGlkYXRpb24gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyB0byBpbmNsdWRlIChvcHRpb25hbClcbiAqIEBwYXJhbSB7Y2FsbGVlfSBzdGFydCBzdGFjayBmdW5jdGlvbiAob3B0aW9uYWwpXG4gKi9cblxuZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IgKG1lc3NhZ2UsIF9wcm9wcywgc3NmKSB7XG4gIHZhciBleHRlbmQgPSBleGNsdWRlKCduYW1lJywgJ21lc3NhZ2UnLCAnc3RhY2snLCAnY29uc3RydWN0b3InLCAndG9KU09OJylcbiAgICAsIHByb3BzID0gZXh0ZW5kKF9wcm9wcyB8fCB7fSk7XG5cbiAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVW5zcGVjaWZpZWQgQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLnNob3dEaWZmID0gZmFsc2U7XG5cbiAgLy8gY29weSBmcm9tIHByb3BlcnRpZXNcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgfVxuXG4gIC8vIGNhcHR1cmUgc3RhY2sgdHJhY2VcbiAgc3NmID0gc3NmIHx8IEFzc2VydGlvbkVycm9yO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzc2YpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHRoaXMuc3RhY2sgPSBlLnN0YWNrO1xuICAgIH1cbiAgfVxufVxuXG4vKiFcbiAqIEluaGVyaXQgZnJvbSBFcnJvci5wcm90b3R5cGVcbiAqL1xuXG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5cbi8qIVxuICogU3RhdGljYWxseSBzZXQgbmFtZVxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcblxuLyohXG4gKiBFbnN1cmUgY29ycmVjdCBjb25zdHJ1Y3RvclxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzc2VydGlvbkVycm9yO1xuXG4vKipcbiAqIEFsbG93IGVycm9ycyB0byBiZSBjb252ZXJ0ZWQgdG8gSlNPTiBmb3Igc3RhdGljIHRyYW5zZmVyLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkZSBzdGFjayAoZGVmYXVsdDogYHRydWVgKVxuICogQHJldHVybiB7T2JqZWN0fSBvYmplY3QgdGhhdCBjYW4gYmUgYEpTT04uc3RyaW5naWZ5YFxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgdmFyIGV4dGVuZCA9IGV4Y2x1ZGUoJ2NvbnN0cnVjdG9yJywgJ3RvSlNPTicsICdzdGFjaycpXG4gICAgLCBwcm9wcyA9IGV4dGVuZCh7IG5hbWU6IHRoaXMubmFtZSB9LCB0aGlzKTtcblxuICAvLyBpbmNsdWRlIHN0YWNrIGlmIGV4aXN0cyBhbmQgbm90IHR1cm5lZCBvZmZcbiAgaWYgKGZhbHNlICE9PSBzdGFjayAmJiB0aGlzLnN0YWNrKSB7XG4gICAgcHJvcHMuc3RhY2sgPSB0aGlzLnN0YWNrO1xuICB9XG5cbiAgcmV0dXJuIHByb3BzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBwYXRodmFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpY2FscGFyYWRveC9maWx0clxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmhhc1Byb3BlcnR5KG9iamVjdCwgbmFtZSlcbiAqXG4gKiBUaGlzIGFsbG93cyBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgb3duXG4gKiBvciBpbmhlcml0ZWQgZnJvbSBwcm90b3R5cGUgY2hhaW4gbmFtZWQgcHJvcGVydHkuXG4gKlxuICogQmFzaWNhbGx5IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIGBpbmBcbiAqIG9wZXJhdG9yIGJ1dCB3b3JrcyBwcm9wZXJseSB3aXRoIG51bGwvdW5kZWZpbmVkIHZhbHVlc1xuICogYW5kIG90aGVyIHByaW1pdGl2ZXMuXG4gKlxuICogICAgIHZhciBvYmogPSB7XG4gKiAgICAgICAgIGFycjogWydhJywgJ2InLCAnYyddXG4gKiAgICAgICAsIHN0cjogJ0hlbGxvJ1xuICogICAgIH1cbiAqXG4gKiBUaGUgZm9sbG93aW5nIHdvdWxkIGJlIHRoZSByZXN1bHRzLlxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmosICdzdHInKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmosICdjb25zdHJ1Y3RvcicpOyAgLy8gdHJ1ZVxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ2JhcicpOyAgLy8gZmFsc2VcbiAqXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgJ2xlbmd0aCcpOyAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgMSk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgNSk7ICAvLyBmYWxzZVxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAnbGVuZ3RoJyk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLmFyciwgMik7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLmFyciwgMyk7ICAvLyBmYWxzZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gbmFtZVxuICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgaXQgZXhpc3RzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBoYXNQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRoZSBgaW5gIG9wZXJhdG9yIGRvZXMgbm90IHdvcmsgd2l0aCBwcmltaXRpdmVzLlxuICByZXR1cm4gbmFtZSBpbiBPYmplY3Qob2JqKTtcbn1cblxuLyogIVxuICogIyMgcGFyc2VQYXRoKHBhdGgpXG4gKlxuICogSGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gcGFyc2Ugc3RyaW5nIG9iamVjdFxuICogcGF0aHMuIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbnRlcm5hbEdldFBhdGhWYWx1ZWAuXG4gKlxuICogICAgICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKCdteW9iamVjdC5wcm9wZXJ0eS5zdWJwcm9wJyk7XG4gKlxuICogIyMjIFBhdGhzOlxuICpcbiAqICogQ2FuIGJlIGluZmluaXRlbHkgZGVlcCBhbmQgbmVzdGVkLlxuICogKiBBcnJheXMgYXJlIGFsc28gdmFsaWQgdXNpbmcgdGhlIGZvcm1hbCBgbXlvYmplY3QuZG9jdW1lbnRbM10ucHJvcGVydHlgLlxuICogKiBMaXRlcmFsIGRvdHMgYW5kIGJyYWNrZXRzIChub3QgZGVsaW1pdGVyKSBtdXN0IGJlIGJhY2tzbGFzaC1lc2NhcGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwYXJzZWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBzdHIgPSBwYXRoLnJlcGxhY2UoLyhbXlxcXFxdKVxcWy9nLCAnJDEuWycpO1xuICB2YXIgcGFydHMgPSBzdHIubWF0Y2goLyhcXFxcXFwufFteLl0rPykrL2cpO1xuICByZXR1cm4gcGFydHMubWFwKGZ1bmN0aW9uIG1hcE1hdGNoZXModmFsdWUpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fFxuICAgICAgdmFsdWUgPT09ICdfX3Byb3RvX18nIHx8XG4gICAgICB2YWx1ZSA9PT0gJ3Byb3RvdHlwZSdcbiAgICApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHJlZ2V4cCA9IC9eXFxbKFxcZCspXFxdJC87XG4gICAgdmFyIG1BcnIgPSByZWdleHAuZXhlYyh2YWx1ZSk7XG4gICAgdmFyIHBhcnNlZCA9IG51bGw7XG4gICAgaWYgKG1BcnIpIHtcbiAgICAgIHBhcnNlZCA9IHsgaTogcGFyc2VGbG9hdChtQXJyWzFdKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSB7IHA6IHZhbHVlLnJlcGxhY2UoL1xcXFwoWy5bXFxdXSkvZywgJyQxJykgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9KTtcbn1cblxuLyogIVxuICogIyMgaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWRbLCBwYXRoRGVwdGhdKVxuICpcbiAqIEhlbHBlciBjb21wYW5pb24gZnVuY3Rpb24gZm9yIGAucGFyc2VQYXRoYCB0aGF0IHJldHVybnNcbiAqIHRoZSB2YWx1ZSBsb2NhdGVkIGF0IHRoZSBwYXJzZWQgYWRkcmVzcy5cbiAqXG4gKiAgICAgIHZhciB2YWx1ZSA9IGdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBzZWFyY2ggYWdhaW5zdFxuICogQHBhcmFtIHtPYmplY3R9IHBhcnNlZCBkZWZpbml0aW9uIGZyb20gYHBhcnNlUGF0aGAuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVwdGggKG5lc3RpbmcgbGV2ZWwpIG9mIHRoZSBwcm9wZXJ0eSB3ZSB3YW50IHRvIHJldHJpZXZlXG4gKiBAcmV0dXJucyB7T2JqZWN0fFVuZGVmaW5lZH0gdmFsdWVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgdmFyIHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICB2YXIgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyBwYXJzZWQubGVuZ3RoIDogcGF0aERlcHRoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICB2YXIgcGFydCA9IHBhcnNlZFtpXTtcbiAgICBpZiAodGVtcG9yYXJ5VmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQuaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQucF07XG4gICAgICB9XG5cbiAgICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICAgIHJlcyA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbi8qICFcbiAqICMjIGludGVybmFsU2V0UGF0aFZhbHVlKG9iaiwgdmFsdWUsIHBhcnNlZClcbiAqXG4gKiBDb21wYW5pb24gZnVuY3Rpb24gZm9yIGBwYXJzZVBhdGhgIHRoYXQgc2V0c1xuICogdGhlIHZhbHVlIGxvY2F0ZWQgYXQgYSBwYXJzZWQgYWRkcmVzcy5cbiAqXG4gKiAgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCAndmFsdWUnLCBwYXJzZWQpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdG8gc2VhcmNoIGFuZCBkZWZpbmUgb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgdG8gdXNlIHVwb24gc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkIGRlZmluaXRpb24gZnJvbSBgcGFyc2VQYXRoYFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWwsIHBhcnNlZCkge1xuICB2YXIgdGVtcE9iaiA9IG9iajtcbiAgdmFyIHBhdGhEZXB0aCA9IHBhcnNlZC5sZW5ndGg7XG4gIHZhciBwYXJ0ID0gbnVsbDtcbiAgLy8gSGVyZSB3ZSBpdGVyYXRlIHRocm91Z2ggZXZlcnkgcGFydCBvZiB0aGUgcGF0aFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhEZXB0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gbnVsbDtcbiAgICB2YXIgcHJvcFZhbCA9IG51bGw7XG4gICAgcGFydCA9IHBhcnNlZFtpXTtcblxuICAgIC8vIElmIGl0J3MgdGhlIGxhc3QgcGFydCBvZiB0aGUgcGF0aCwgd2Ugc2V0IHRoZSAncHJvcE5hbWUnIHZhbHVlIHdpdGggdGhlIHByb3BlcnR5IG5hbWVcbiAgICBpZiAoaSA9PT0gcGF0aERlcHRoIC0gMSkge1xuICAgICAgcHJvcE5hbWUgPSB0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJyA/IHBhcnQuaSA6IHBhcnQucDtcbiAgICAgIC8vIE5vdyB3ZSBzZXQgdGhlIHByb3BlcnR5IHdpdGggdGhlIG5hbWUgaGVsZCBieSAncHJvcE5hbWUnIG9uIG9iamVjdCB3aXRoIHRoZSBkZXNpcmVkIHZhbFxuICAgICAgdGVtcE9ialtwcm9wTmFtZV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFydC5wICE9PSAndW5kZWZpbmVkJyAmJiB0ZW1wT2JqW3BhcnQucF0pIHtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3BhcnQucF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFydC5pICE9PSAndW5kZWZpbmVkJyAmJiB0ZW1wT2JqW3BhcnQuaV0pIHtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3BhcnQuaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBvYmogZG9lc24ndCBoYXZlIHRoZSBwcm9wZXJ0eSB3ZSBjcmVhdGUgb25lIHdpdGggdGhhdCBuYW1lIHRvIGRlZmluZSBpdFxuICAgICAgdmFyIG5leHQgPSBwYXJzZWRbaSArIDFdO1xuICAgICAgLy8gSGVyZSB3ZSBzZXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdoaWNoIHdpbGwgYmUgZGVmaW5lZFxuICAgICAgcHJvcE5hbWUgPSB0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJyA/IHBhcnQuaSA6IHBhcnQucDtcbiAgICAgIC8vIEhlcmUgd2UgZGVjaWRlIGlmIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBhbiBhcnJheSBvciBhIG5ldyBvYmplY3RcbiAgICAgIHByb3BWYWwgPSB0eXBlb2YgbmV4dC5wID09PSAndW5kZWZpbmVkJyA/IFtdIDoge307XG4gICAgICB0ZW1wT2JqW3Byb3BOYW1lXSA9IHByb3BWYWw7XG4gICAgICB0ZW1wT2JqID0gdGVtcE9ialtwcm9wTmFtZV07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogIyMjIC5nZXRQYXRoSW5mbyhvYmplY3QsIHBhdGgpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBwcm9wZXJ0eSBpbmZvIGluIGFuXG4gKiBvYmplY3QgZ2l2ZW4gYSBzdHJpbmcgcGF0aC5cbiAqXG4gKiBUaGUgcGF0aCBpbmZvIGNvbnNpc3RzIG9mIGFuIG9iamVjdCB3aXRoIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogKiBwYXJlbnQgLSBUaGUgcGFyZW50IG9iamVjdCBvZiB0aGUgcHJvcGVydHkgcmVmZXJlbmNlZCBieSBgcGF0aGBcbiAqICogbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBwcm9wZXJ0eSwgYSBudW1iZXIgaWYgaXQgd2FzIGFuIGFycmF5IGluZGV4ZXJcbiAqICogdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICogKiBleGlzdHMgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBleGlzdHMgb3Igbm90XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IGluZm9cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldFBhdGhJbmZvXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFBhdGhJbmZvKG9iaiwgcGF0aCkge1xuICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICB2YXIgbGFzdCA9IHBhcnNlZFtwYXJzZWQubGVuZ3RoIC0gMV07XG4gIHZhciBpbmZvID0ge1xuICAgIHBhcmVudDpcbiAgICAgIHBhcnNlZC5sZW5ndGggPiAxID9cbiAgICAgICAgaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6XG4gICAgICAgIG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCksXG4gIH07XG4gIGluZm8uZXhpc3RzID0gaGFzUHJvcGVydHkoaW5mby5wYXJlbnQsIGluZm8ubmFtZSk7XG5cbiAgcmV0dXJuIGluZm87XG59XG5cbi8qKlxuICogIyMjIC5nZXRQYXRoVmFsdWUob2JqZWN0LCBwYXRoKVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgdmFsdWVzIGluIGFuXG4gKiBvYmplY3QgZ2l2ZW4gYSBzdHJpbmcgcGF0aC5cbiAqXG4gKiAgICAgdmFyIG9iaiA9IHtcbiAqICAgICAgICAgcHJvcDE6IHtcbiAqICAgICAgICAgICAgIGFycjogWydhJywgJ2InLCAnYyddXG4gKiAgICAgICAgICAgLCBzdHI6ICdIZWxsbydcbiAqICAgICAgICAgfVxuICogICAgICAgLCBwcm9wMjoge1xuICogICAgICAgICAgICAgYXJyOiBbIHsgbmVzdGVkOiAnVW5pdmVyc2UnIH0gXVxuICogICAgICAgICAgICwgc3RyOiAnSGVsbG8gYWdhaW4hJ1xuICogICAgICAgICB9XG4gKiAgICAgfVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgdGhlIHJlc3VsdHMuXG4gKlxuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMS5zdHInKTsgLy8gSGVsbG9cbiAqICAgICBnZXRQYXRoVmFsdWUob2JqLCAncHJvcDEuYXR0WzJdJyk7IC8vIGJcbiAqICAgICBnZXRQYXRoVmFsdWUob2JqLCAncHJvcDIuYXJyWzBdLm5lc3RlZCcpOyAvLyBVbml2ZXJzZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB2YWx1ZSBvciBgdW5kZWZpbmVkYFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UGF0aFZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFBhdGhWYWx1ZShvYmosIHBhdGgpIHtcbiAgdmFyIGluZm8gPSBnZXRQYXRoSW5mbyhvYmosIHBhdGgpO1xuICByZXR1cm4gaW5mby52YWx1ZTtcbn1cblxuLyoqXG4gKiAjIyMgLnNldFBhdGhWYWx1ZShvYmplY3QsIHBhdGgsIHZhbHVlKVxuICpcbiAqIERlZmluZSB0aGUgdmFsdWUgaW4gYW4gb2JqZWN0IGF0IGEgZ2l2ZW4gc3RyaW5nIHBhdGguXG4gKlxuICogYGBganNcbiAqIHZhciBvYmogPSB7XG4gKiAgICAgcHJvcDE6IHtcbiAqICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICwgc3RyOiAnSGVsbG8nXG4gKiAgICAgfVxuICogICAsIHByb3AyOiB7XG4gKiAgICAgICAgIGFycjogWyB7IG5lc3RlZDogJ1VuaXZlcnNlJyB9IF1cbiAqICAgICAgICwgc3RyOiAnSGVsbG8gYWdhaW4hJ1xuICogICAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBUaGUgZm9sbG93aW5nIHdvdWxkIGJlIGFjY2VwdGFibGUuXG4gKlxuICogYGBganNcbiAqIHZhciBwcm9wZXJ0aWVzID0gcmVxdWlyZSgndGVhLXByb3BlcnRpZXMnKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AxLnN0cicsICdIZWxsbyBVbml2ZXJzZSEnKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AxLmFyclsyXScsICdCJyk7XG4gKiBwcm9wZXJ0aWVzLnNldChvYmosICdwcm9wMi5hcnJbMF0ubmVzdGVkLnZhbHVlJywgeyBoZWxsbzogJ3VuaXZlcnNlJyB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2V0UGF0aFZhbHVlKG9iaiwgcGF0aCwgdmFsKSB7XG4gIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgocGF0aCk7XG4gIGludGVybmFsU2V0UGF0aFZhbHVlKG9iaiwgdmFsLCBwYXJzZWQpO1xuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaGFzUHJvcGVydHk6IGhhc1Byb3BlcnR5LFxuICBnZXRQYXRoSW5mbzogZ2V0UGF0aEluZm8sXG4gIGdldFBhdGhWYWx1ZTogZ2V0UGF0aFZhbHVlLFxuICBzZXRQYXRoVmFsdWU6IHNldFBhdGhWYWx1ZSxcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmZsYWcob2JqZWN0LCBrZXksIFt2YWx1ZV0pXG4gKlxuICogR2V0IG9yIHNldCBhIGZsYWcgdmFsdWUgb24gYW4gb2JqZWN0LiBJZiBhXG4gKiB2YWx1ZSBpcyBwcm92aWRlZCBpdCB3aWxsIGJlIHNldCwgZWxzZSBpdCB3aWxsXG4gKiByZXR1cm4gdGhlIGN1cnJlbnRseSBzZXQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgaWZcbiAqIHRoZSB2YWx1ZSBpcyBub3Qgc2V0LlxuICpcbiAqICAgICB1dGlscy5mbGFnKHRoaXMsICdmb28nLCAnYmFyJyk7IC8vIHNldHRlclxuICogICAgIHV0aWxzLmZsYWcodGhpcywgJ2ZvbycpOyAvLyBnZXR0ZXIsIHJldHVybnMgYGJhcmBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IGNvbnN0cnVjdGVkIEFzc2VydGlvblxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgKG9wdGlvbmFsKVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZmxhZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICB2YXIgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBmbGFnc1trZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZsYWdzW2tleV07XG4gIH1cbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gdGVzdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcblxuLyoqXG4gKiAjIyMgLnRlc3Qob2JqZWN0LCBleHByZXNzaW9uKVxuICpcbiAqIFRlc3QgYW4gb2JqZWN0IGZvciBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgdGVzdFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGVzdChvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCAnbmVnYXRlJylcbiAgICAsIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufTtcbiIsICIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwudHlwZURldGVjdCA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuLyogIVxuICogdHlwZS1kZXRlY3RcbiAqIENvcHlyaWdodChjKSAyMDEzIGpha2UgbHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbnZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG52YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xpc3RcblxudmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnO1xudmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEV4aXN0cyA9IHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtNYXBFeGlzdHMgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgd2Vha1NldEV4aXN0cyA9IHR5cGVvZiBXZWFrU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciBkYXRhVmlld0V4aXN0cyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc2V0RW50cmllc0V4aXN0cyA9IHNldEV4aXN0cyAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xudmFyIG1hcEVudHJpZXNFeGlzdHMgPSBtYXBFeGlzdHMgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzZXRJdGVyYXRvclByb3RvdHlwZSA9IHNldEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBTZXQoKS5lbnRyaWVzKCkpO1xudmFyIG1hcEl0ZXJhdG9yUHJvdG90eXBlID0gbWFwRW50cmllc0V4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IE1hcCgpLmVudHJpZXMoKSk7XG52YXIgYXJyYXlJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbnZhciBhcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciBzdHJpbmdJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBTdHJpbmcucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUgPSBzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoJydbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciB0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCA9IDg7XG52YXIgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoID0gLTE7XG4vKipcbiAqICMjIyB0eXBlT2YgKG9iailcbiAqXG4gKiBVc2VzIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LFxuICogbm9ybWFsaXNpbmcgYmVoYXZpb3VyIGFjcm9zcyBlbmdpbmUgdmVyc2lvbnMgJiB3ZWxsIG9wdGltaXNlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAqIEByZXR1cm4ge1N0cmluZ30gb2JqZWN0IHR5cGVcbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHR5cGVEZXRlY3Qob2JqKSB7XG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzLDAzOSwwMzUgb3BzL3NlYyBcdTAwQjExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIFx1MDBCMTQuNTQlICg3NSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMSw2NTMsMTUzIG9wcy9zZWMgXHUwMEIxMS45MSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCA5LDk3OCw2NjAgb3BzL3NlYyBcdTAwQjExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIFx1MDBCMTEuNzMlICg3NyBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMzgsNTY0LDc5NiBvcHMvc2VjIFx1MDBCMTEuMTUlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMzEsMTQ4LDk0MCBvcHMvc2VjIFx1MDBCMTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIFx1MDBCMTEuOTAlICg3OCBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggMzIsMzYzLDM2OCBvcHMvc2VjIFx1MDBCMTEuMDclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMzEsMjk2LDg3MCBvcHMvc2VjIFx1MDBCMTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyBcdTAwQjExLjE3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiBQb3N0OlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDM2LDQyOCw5NjIgb3BzL3NlYyBcdTAwQjExLjM3JSAoODQgcnVucyBzYW1wbGVkKVxuICAgKi9cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cpYGBcbiAgICogIC0gTm9kZSA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBQaGFudG9tSlMgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIDExID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIEVkZ2UgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKWBgXG4gICAqICAtIENocm9tZSBXb3JrZXIgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCBXb3JrZXIgPT09IFwiW29iamVjdCBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBTYWZhcmkgV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgMTEgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgRWRnZSBXb3JrZXIgPT09IFwiW29iamVjdCBXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKi9cbiAgaWYgKG9iaiA9PT0gZ2xvYmFsT2JqZWN0KSB7XG4gICAgcmV0dXJuICdnbG9iYWwnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIGFycmF5IGxpdGVyYWwgICAgICB4IDIsODg4LDM1MiBvcHMvc2VjIFx1MDBCMTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIFx1MDBCMTAuOTYlICg4MSBydW5zIHNhbXBsZWQpXG4gICAqL1xuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShvYmopICYmXG4gICAgKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID09PSBmYWxzZSB8fCAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBvYmopKVxuICApIHtcbiAgICByZXR1cm4gJ0FycmF5JztcbiAgfVxuXG4gIC8vIE5vdCBjYWNoaW5nIGV4aXN0ZW5jZSBvZiBgd2luZG93YCBhbmQgcmVsYXRlZCBwcm9wZXJ0aWVzIGR1ZSB0byBwb3RlbnRpYWxcbiAgLy8gZm9yIGB3aW5kb3dgIHRvIGJlIHVuc2V0IGJlZm9yZSB0ZXN0cyBpbiBxdWFzaS1icm93c2VyIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHdpbmRvdyAhPT0gbnVsbCkge1xuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2xvY2F0aW9uKVxuICAgICAqIFdoYXRXRyBIVE1MJDcuNy4zIC0gVGhlIGBMb2NhdGlvbmAgaW50ZXJmYWNlXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cubG9jYXRpb24pYGBcbiAgICAgKiAgLSBJRSA8PTExID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICogIC0gSUUgRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYXRpb24gPT09ICdvYmplY3QnICYmIG9iaiA9PT0gd2luZG93LmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gJ0xvY2F0aW9uJztcbiAgICB9XG5cbiAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9jdW1lbnQpXG4gICAgICogV2hhdFdHIEhUTUwkMy4xLjEgLSBUaGUgYERvY3VtZW50YCBvYmplY3RcbiAgICAgKiBOb3RlOiBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBhZGhlciB0byB0aGUgVzNDIERPTSBMZXZlbCAyIHNwZWNcbiAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTI2ODA5MjY4KVxuICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgKiAgICAgICBib3RoIFREIGFuZCBUSCBlbGVtZW50cy4gV2hhdFdHIHNlcGFyYXRlcyB0aGVzZS5cbiAgICAgKiAgICAgICBXaGF0V0cgSFRNTCBzdGF0ZXM6XG4gICAgICogICAgICAgICA+IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIFdpbmRvdyBvYmplY3RzIG11c3QgYWxzbyBoYXZlIGFcbiAgICAgKiAgICAgICAgID4gd3JpdGFibGUsIGNvbmZpZ3VyYWJsZSwgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgbmFtZWRcbiAgICAgKiAgICAgICAgID4gSFRNTERvY3VtZW50IHdob3NlIHZhbHVlIGlzIHRoZSBEb2N1bWVudCBpbnRlcmZhY2Ugb2JqZWN0LlxuICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpYGBcbiAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IERvY3VtZW50XVwiXG4gICAgICogIC0gSUUgMTEgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5kb2N1bWVudCA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiAnRG9jdW1lbnQnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNtaW1ldHlwZWFycmF5KVxuICAgICAgICogV2hhdFdHIEhUTUwkOC42LjEuNSAtIFBsdWdpbnMgLSBJbnRlcmZhY2UgTWltZVR5cGVBcnJheVxuICAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuYXZpZ2F0b3IubWltZVR5cGVzKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNNaW1lVHlwZXNDb2xsZWN0aW9uXVwiXG4gICAgICAgKi9cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuICAgICAgICByZXR1cm4gJ01pbWVUeXBlQXJyYXknO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBQbHVnaW5BcnJheVxuICAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuYXZpZ2F0b3IucGx1Z2lucylgYFxuICAgICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IE1TUGx1Z2luc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMpIHtcbiAgICAgICAgcmV0dXJuICdQbHVnaW5BcnJheSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdvYmplY3QnKSAmJlxuICAgICAgICBvYmogaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3BsdWdpbmFycmF5KVxuICAgICAgKiBXaGF0V0cgSFRNTCQ0LjQuNCAtIFRoZSBgYmxvY2txdW90ZWAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFF1b3RlRWxlbWVudGBcbiAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdibG9ja3F1b3RlJykpYGBcbiAgICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IEhUTUxCbG9ja0VsZW1lbnRdXCJcbiAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdCTE9DS1FVT1RFJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxRdW90ZUVsZW1lbnQnO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNodG1sdGFibGVkYXRhY2VsbGVsZW1lbnQpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ0LjkuOSAtIFRoZSBgdGRgIGVsZW1lbnQgLSBJbnRlcmZhY2UgYEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdURCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQnO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNodG1sdGFibGVoZWFkZXJjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnRgXG4gICAgICAgKiBOb3RlOiBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBhZGhlciB0byB0aGUgVzNDIERPTSBMZXZlbCAyIHNwZWNcbiAgICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtODI5MTUwNzUpXG4gICAgICAgKiAgICAgICB3aGljaCBzdWdnZXN0cyB0aGF0IGJyb3dzZXJzIHNob3VsZCB1c2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgZm9yXG4gICAgICAgKiAgICAgICBib3RoIFREIGFuZCBUSCBlbGVtZW50cy4gV2hhdFdHIHNlcGFyYXRlcyB0aGVzZS5cbiAgICAgICAqIFRlc3Q6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKVxuICAgICAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqL1xuICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnVEgnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgRmxvYXQ2NEFycmF5ICAgICAgIHggNjI1LDY0NCBvcHMvc2VjIFx1MDBCMTEuNTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCAxLDI3OSw4NTIgb3BzL3NlYyBcdTAwQjEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgXHUwMEIxMS45NSUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQxNkFycmF5ICAgICAgICB4IDEsMDA4LDM4MCBvcHMvc2VjIFx1MDBCMTIuMjUlICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCAxLDEyOCwwNDAgb3BzL3NlYyBcdTAwQjEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgXHUwMEIxMi44OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDE2QXJyYXkgICAgICAgICB4IDEsMTc2LDM0OCBvcHMvc2VjIFx1MDBCMTUuNzklICg4NiBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCAxLDA1OCw3MDcgb3BzL3NlYyBcdTAwQjE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgXHUwMEIxNC4yMCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgRmxvYXQ2NEFycmF5ICAgICAgIHggNywxMDUsNjcxIG9wcy9zZWMgXHUwMEIxMTMuNDclICg2NCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCA1LDg4Nyw5MTIgb3BzL3NlYyBcdTAwQjExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgXHUwMEIxMS43NiUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQxNkFycmF5ICAgICAgICB4IDYsNTU5LDc5NSBvcHMvc2VjIFx1MDBCMTEuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCA2LDQ2Myw5NjYgb3BzL3NlYyBcdTAwQjExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgXHUwMEIxMy40OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDE2QXJyYXkgICAgICAgICB4IDYsNTgzLDUxMSBvcHMvc2VjIFx1MDBCMTEuOTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCA2LDYwNiwwNzggb3BzL3NlYyBcdTAwQjExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgXHUwMEIxMS43NyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgdmFyIHN0cmluZ1RhZyA9IChzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmdUYWc7XG4gIH1cblxuICB2YXIgb2JqUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgcmVnZXggbGl0ZXJhbCAgICAgIHggMSw3NzIsMzg1IG9wcy9zZWMgXHUwMEIxMS44NSUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDIsMTQzLDYzNCBvcHMvc2VjIFx1MDBCMTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIFx1MDBCMTAuNjUlICg3OCBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAzLDkzMSwxMDggb3BzL3NlYyBcdTAwQjEwLjU4JSAoODQgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBSZWdFeHAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdSZWdFeHAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAyLDEzMCwwNzQgb3BzL3NlYyBcdTAwQjE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyBcdTAwQjExLjM1JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBEYXRlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0ZSc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtcHJvbWlzZS5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDI1LjQuNS40IC0gUHJvbWlzZS5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiUHJvbWlzZVwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFByb21pc2UucmVzb2x2ZSgpKWBgXG4gICAqICAtIENocm9tZSA8PTQ3ID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEVkZ2UgPD0yMCA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKiAgLSBGaXJlZm94IDI5LUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICogIC0gU2FmYXJpIDcuMS1MYXRlc3QgPT09IFwiW29iamVjdCBQcm9taXNlXVwiXG4gICAqL1xuICBpZiAocHJvbWlzZUV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFByb21pc2UucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdQcm9taXNlJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgc2V0ICAgICAgICAgICAgICAgIHggMiwyMjIsMTg2IG9wcy9zZWMgXHUwMEIxMS4zMSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgc2V0ICAgICAgICAgICAgICAgIHggNCw1NDUsODc5IG9wcy9zZWMgXHUwMEIxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIFx1MDBCMTEuNTklICg4MSBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDQsMTgzLDk0NSBvcHMvc2VjIFx1MDBCMTYuNTklICg4MiBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdNYXAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCAxLDMyMywyMjAgb3BzL3NlYyBcdTAwQjEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyBcdTAwQjEyLjAxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAod2Vha1NldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFdlYWtTZXQucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdXZWFrU2V0JztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha21hcCAgICAgICAgICAgIHggMSw1MDAsMjYwIG9wcy9zZWMgXHUwMEIxMi4wMiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgd2Vha21hcCAgICAgICAgICAgIHggMyw4ODEsMzg0IG9wcy9zZWMgXHUwMEIxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgXHUwMEIxMS42NyUgKDc2IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggNSw4MzgsMDAwIG9wcy9zZWMgXHUwMEIxMC45OSUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIHJldHVybiBPYmplY3RcbiAgICAucHJvdG90eXBlXG4gICAgLnRvU3RyaW5nXG4gICAgLmNhbGwob2JqKVxuICAgIC5zbGljZSh0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCwgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoKTtcbn1cblxucmV0dXJuIHR5cGVEZXRlY3Q7XG5cbn0pKSk7XG4iLCAiLyohXG4gKiBDaGFpIC0gZXhwZWN0VHlwZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5leHBlY3RUeXBlcyhvYmosIHR5cGVzKVxuICpcbiAqIEVuc3VyZXMgdGhhdCB0aGUgb2JqZWN0IGJlaW5nIHRlc3RlZCBhZ2FpbnN0IGlzIG9mIGEgdmFsaWQgdHlwZS5cbiAqXG4gKiAgICAgdXRpbHMuZXhwZWN0VHlwZXModGhpcywgWydhcnJheScsICdvYmplY3QnLCAnc3RyaW5nJ10pO1xuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9iaiBjb25zdHJ1Y3RlZCBBc3NlcnRpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHR5cGUgQSBsaXN0IG9mIGFsbG93ZWQgdHlwZXMgZm9yIHRoaXMgYXNzZXJ0aW9uXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBleHBlY3RUeXBlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG52YXIgQXNzZXJ0aW9uRXJyb3IgPSByZXF1aXJlKCdhc3NlcnRpb24tZXJyb3InKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICB2YXIgZmxhZ01zZyA9IGZsYWcob2JqLCAnbWVzc2FnZScpO1xuICB2YXIgc3NmaSA9IGZsYWcob2JqLCAnc3NmaScpO1xuXG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcblxuICBvYmogPSBmbGFnKG9iaiwgJ29iamVjdCcpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC50b0xvd2VyQ2FzZSgpOyB9KTtcbiAgdHlwZXMuc29ydCgpO1xuXG4gIC8vIFRyYW5zZm9ybXMgWydsb3JlbScsICdpcHN1bSddIGludG8gJ2EgbG9yZW0sIG9yIGFuIGlwc3VtJ1xuICB2YXIgc3RyID0gdHlwZXMubWFwKGZ1bmN0aW9uICh0LCBpbmRleCkge1xuICAgIHZhciBhcnQgPSB+WyAnYScsICdlJywgJ2knLCAnbycsICd1JyBdLmluZGV4T2YodC5jaGFyQXQoMCkpID8gJ2FuJyA6ICdhJztcbiAgICB2YXIgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gJ29yICcgOiAnJztcbiAgICByZXR1cm4gb3IgKyBhcnQgKyAnICcgKyB0O1xuICB9KS5qb2luKCcsICcpO1xuXG4gIHZhciBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKCF0eXBlcy5zb21lKGZ1bmN0aW9uIChleHBlY3RlZCkgeyByZXR1cm4gb2JqVHlwZSA9PT0gZXhwZWN0ZWQ7IH0pKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArICdvYmplY3QgdGVzdGVkIG11c3QgYmUgJyArIHN0ciArICcsIGJ1dCAnICsgb2JqVHlwZSArICcgZ2l2ZW4nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0QWN0dWFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0QWN0dWFsKG9iamVjdCwgW2FjdHVhbF0pXG4gKlxuICogUmV0dXJucyB0aGUgYGFjdHVhbGAgdmFsdWUgZm9yIGFuIEFzc2VydGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldEFjdHVhbFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0QWN0dWFsKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBnZXRGdW5jTmFtZSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldEZ1bmNOYW1lKGNvbnN0cnVjdG9yRm4pXG4gKlxuICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLlxuICogV2hlbiBhIG5vbi1mdW5jdGlvbiBpbnN0YW5jZSBpcyBwYXNzZWQsIHJldHVybnMgYG51bGxgLlxuICogVGhpcyBhbHNvIGluY2x1ZGVzIGEgcG9seWZpbGwgZnVuY3Rpb24gaWYgYGFGdW5jLm5hbWVgIGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBuYW1lIGdldEZ1bmNOYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG52YXIgdG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25OYW1lTWF0Y2ggPSAvXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCpbXig/OipcXC8pXStcXCpcXC9cXHMqKSooW15cXHNcXChcXC9dKykvO1xudmFyIG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoID0gNTEyO1xuZnVuY3Rpb24gZ2V0RnVuY05hbWUoYUZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBhRnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG5hbWUgPSAnJztcbiAgaWYgKHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFGdW5jLm5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZWZsZWN0XG4gICAgdmFyIGZ1bmN0aW9uU291cmNlID0gdG9TdHJpbmcuY2FsbChhRnVuYyk7XG4gICAgLy8gVG8gYXZvaWQgdW5jb25zdHJhaW5lZCByZXNvdXJjZSBjb25zdW1wdGlvbiBkdWUgdG8gcGF0aGFsb2dpY2FsbHkgbGFyZ2UgZnVuY3Rpb24gbmFtZXMsXG4gICAgLy8gd2UgbGltaXQgdGhlIGF2YWlsYWJsZSByZXR1cm4gdmFsdWUgdG8gYmUgbGVzcyB0aGFuIDUxMiBjaGFyYWN0ZXJzLlxuICAgIGlmIChmdW5jdGlvblNvdXJjZS5pbmRleE9mKCcoJykgPiBtYXhGdW5jdGlvblNvdXJjZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgcnVuIGEgcG9seWZpbGwgaWYgRnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgYG5hbWVgIHByb3BlcnR5IGFuZCBpZiBhRnVuYy5uYW1lIGlzIG5vdCBkZWZpbmVkXG4gICAgdmFyIG1hdGNoID0gZnVuY3Rpb25Tb3VyY2UubWF0Y2goZnVuY3Rpb25OYW1lTWF0Y2gpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbmFtZSA9IG1hdGNoWzFdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBgbmFtZWAgcHJvcGVydHkgd2UganVzdCB1c2UgaXRcbiAgICBuYW1lID0gYUZ1bmMubmFtZTtcbiAgfVxuXG4gIHJldHVybiBuYW1lO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEZ1bmNOYW1lO1xuIiwgIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwubG91cGUgPSB7fSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG5cbiAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgdmFyIGFuc2lDb2xvcnMgPSB7XG4gICAgYm9sZDogWycxJywgJzIyJ10sXG4gICAgZGltOiBbJzInLCAnMjInXSxcbiAgICBpdGFsaWM6IFsnMycsICcyMyddLFxuICAgIHVuZGVybGluZTogWyc0JywgJzI0J10sXG4gICAgLy8gNSAmIDYgYXJlIGJsaW5raW5nXG4gICAgaW52ZXJzZTogWyc3JywgJzI3J10sXG4gICAgaGlkZGVuOiBbJzgnLCAnMjgnXSxcbiAgICBzdHJpa2U6IFsnOScsICcyOSddLFxuICAgIC8vIDEwLTIwIGFyZSBmb250c1xuICAgIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICAgIGJsYWNrOiBbJzMwJywgJzM5J10sXG4gICAgcmVkOiBbJzMxJywgJzM5J10sXG4gICAgZ3JlZW46IFsnMzInLCAnMzknXSxcbiAgICB5ZWxsb3c6IFsnMzMnLCAnMzknXSxcbiAgICBibHVlOiBbJzM0JywgJzM5J10sXG4gICAgbWFnZW50YTogWyczNScsICczOSddLFxuICAgIGN5YW46IFsnMzYnLCAnMzknXSxcbiAgICB3aGl0ZTogWyczNycsICczOSddLFxuICAgIGJyaWdodGJsYWNrOiBbJzMwOzEnLCAnMzknXSxcbiAgICBicmlnaHRyZWQ6IFsnMzE7MScsICczOSddLFxuICAgIGJyaWdodGdyZWVuOiBbJzMyOzEnLCAnMzknXSxcbiAgICBicmlnaHR5ZWxsb3c6IFsnMzM7MScsICczOSddLFxuICAgIGJyaWdodGJsdWU6IFsnMzQ7MScsICczOSddLFxuICAgIGJyaWdodG1hZ2VudGE6IFsnMzU7MScsICczOSddLFxuICAgIGJyaWdodGN5YW46IFsnMzY7MScsICczOSddLFxuICAgIGJyaWdodHdoaXRlOiBbJzM3OzEnLCAnMzknXSxcbiAgICBncmV5OiBbJzkwJywgJzM5J11cbiAgfTtcbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBzcGVjaWFsOiAnY3lhbicsXG4gICAgbnVtYmVyOiAneWVsbG93JyxcbiAgICBiaWdpbnQ6ICd5ZWxsb3cnLFxuICAgIGJvb2xlYW46ICd5ZWxsb3cnLFxuICAgIHVuZGVmaW5lZDogJ2dyZXknLFxuICAgIG51bGw6ICdib2xkJyxcbiAgICBzdHJpbmc6ICdncmVlbicsXG4gICAgc3ltYm9sOiAnZ3JlZW4nLFxuICAgIGRhdGU6ICdtYWdlbnRhJyxcbiAgICByZWdleHA6ICdyZWQnXG4gIH07XG4gIHZhciB0cnVuY2F0b3IgPSAnXHUyMDI2JztcblxuICBmdW5jdGlvbiBjb2xvcmlzZSh2YWx1ZSwgc3R5bGVUeXBlKSB7XG4gICAgdmFyIGNvbG9yID0gYW5zaUNvbG9yc1tzdHlsZXNbc3R5bGVUeXBlXV0gfHwgYW5zaUNvbG9yc1tzdHlsZVR5cGVdO1xuXG4gICAgaWYgKCFjb2xvcikge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFx4MUJbXCIuY29uY2F0KGNvbG9yWzBdLCBcIm1cIikuY29uY2F0KFN0cmluZyh2YWx1ZSksIFwiXFx4MUJbXCIpLmNvbmNhdChjb2xvclsxXSwgXCJtXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXNlT3B0aW9ucygpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgIF9yZWYkc2hvd0hpZGRlbiA9IF9yZWYuc2hvd0hpZGRlbixcbiAgICAgICAgc2hvd0hpZGRlbiA9IF9yZWYkc2hvd0hpZGRlbiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHNob3dIaWRkZW4sXG4gICAgICAgIF9yZWYkZGVwdGggPSBfcmVmLmRlcHRoLFxuICAgICAgICBkZXB0aCA9IF9yZWYkZGVwdGggPT09IHZvaWQgMCA/IDIgOiBfcmVmJGRlcHRoLFxuICAgICAgICBfcmVmJGNvbG9ycyA9IF9yZWYuY29sb3JzLFxuICAgICAgICBjb2xvcnMgPSBfcmVmJGNvbG9ycyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbG9ycyxcbiAgICAgICAgX3JlZiRjdXN0b21JbnNwZWN0ID0gX3JlZi5jdXN0b21JbnNwZWN0LFxuICAgICAgICBjdXN0b21JbnNwZWN0ID0gX3JlZiRjdXN0b21JbnNwZWN0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRjdXN0b21JbnNwZWN0LFxuICAgICAgICBfcmVmJHNob3dQcm94eSA9IF9yZWYuc2hvd1Byb3h5LFxuICAgICAgICBzaG93UHJveHkgPSBfcmVmJHNob3dQcm94eSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHNob3dQcm94eSxcbiAgICAgICAgX3JlZiRtYXhBcnJheUxlbmd0aCA9IF9yZWYubWF4QXJyYXlMZW5ndGgsXG4gICAgICAgIG1heEFycmF5TGVuZ3RoID0gX3JlZiRtYXhBcnJheUxlbmd0aCA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfcmVmJG1heEFycmF5TGVuZ3RoLFxuICAgICAgICBfcmVmJGJyZWFrTGVuZ3RoID0gX3JlZi5icmVha0xlbmd0aCxcbiAgICAgICAgYnJlYWtMZW5ndGggPSBfcmVmJGJyZWFrTGVuZ3RoID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9yZWYkYnJlYWtMZW5ndGgsXG4gICAgICAgIF9yZWYkc2VlbiA9IF9yZWYuc2VlbixcbiAgICAgICAgc2VlbiA9IF9yZWYkc2VlbiA9PT0gdm9pZCAwID8gW10gOiBfcmVmJHNlZW4sXG4gICAgICAgIF9yZWYkdHJ1bmNhdGUgPSBfcmVmLnRydW5jYXRlLFxuICAgICAgICB0cnVuY2F0ZSA9IF9yZWYkdHJ1bmNhdGUgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX3JlZiR0cnVuY2F0ZSxcbiAgICAgICAgX3JlZiRzdHlsaXplID0gX3JlZi5zdHlsaXplLFxuICAgICAgICBzdHlsaXplID0gX3JlZiRzdHlsaXplID09PSB2b2lkIDAgPyBTdHJpbmcgOiBfcmVmJHN0eWxpemU7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgICBkZXB0aDogTnVtYmVyKGRlcHRoKSxcbiAgICAgIGNvbG9yczogQm9vbGVhbihjb2xvcnMpLFxuICAgICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICAgIHNob3dQcm94eTogQm9vbGVhbihzaG93UHJveHkpLFxuICAgICAgbWF4QXJyYXlMZW5ndGg6IE51bWJlcihtYXhBcnJheUxlbmd0aCksXG4gICAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICAgIHRydW5jYXRlOiBOdW1iZXIodHJ1bmNhdGUpLFxuICAgICAgc2Vlbjogc2VlbixcbiAgICAgIHN0eWxpemU6IHN0eWxpemVcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgICBvcHRpb25zLnN0eWxpemUgPSBjb2xvcmlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICBmdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIGxlbmd0aCkge1xuICAgIHZhciB0YWlsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVuY2F0b3I7XG4gICAgc3RyaW5nID0gU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHRhaWxMZW5ndGggPSB0YWlsLmxlbmd0aDtcbiAgICB2YXIgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICAgIHJldHVybiB0YWlsO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHN0cmluZy5zbGljZSgwLCBsZW5ndGggLSB0YWlsTGVuZ3RoKSkuY29uY2F0KHRhaWwpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICBmdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSkge1xuICAgIHZhciBzZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcsICc7XG4gICAgaW5zcGVjdEl0ZW0gPSBpbnNwZWN0SXRlbSB8fCBvcHRpb25zLmluc3BlY3Q7XG4gICAgdmFyIHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gICAgdmFyIG91dHB1dCA9ICcnO1xuICAgIHZhciBwZWVrID0gJyc7XG4gICAgdmFyIHRydW5jYXRlZCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICAgIHZhciBsYXN0ID0gaSArIDEgPT09IGxpc3QubGVuZ3RoO1xuICAgICAgdmFyIHNlY29uZFRvTGFzdCA9IGkgKyAyID09PSBsaXN0Lmxlbmd0aDtcbiAgICAgIHRydW5jYXRlZCA9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChsaXN0Lmxlbmd0aCAtIGksIFwiKVwiKTtcbiAgICAgIHZhciB2YWx1ZSA9IGxpc3RbaV07IC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVtYWluaW5nIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgYSBzZXBhcmF0b3Igb2YgYCwgYFxuXG4gICAgICBvcHRpb25zLnRydW5jYXRlID0gb3JpZ2luYWxMZW5ndGggLSBvdXRwdXQubGVuZ3RoIC0gKGxhc3QgPyAwIDogc2VwYXJhdG9yLmxlbmd0aCk7XG4gICAgICB2YXIgc3RyaW5nID0gcGVlayB8fCBpbnNwZWN0SXRlbSh2YWx1ZSwgb3B0aW9ucykgKyAobGFzdCA/ICcnIDogc2VwYXJhdG9yKTtcbiAgICAgIHZhciBuZXh0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0cmluZy5sZW5ndGg7XG4gICAgICB2YXIgdHJ1bmNhdGVkTGVuZ3RoID0gbmV4dExlbmd0aCArIHRydW5jYXRlZC5sZW5ndGg7IC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgZWxlbWVudCwgYW5kIGFkZGluZyBpdCB3b3VsZFxuICAgICAgLy8gdGFrZSB1cyBvdmVyIGxlbmd0aCwgYnV0IGFkZGluZyB0aGUgdHJ1bmNhdG9yIHdvdWxkbid0IC0gdGhlbiBicmVhayBub3dcblxuICAgICAgaWYgKGxhc3QgJiYgbmV4dExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG91dHB1dC5sZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoIDw9IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzbid0IHRoZSBsYXN0IG9yIHNlY29uZCB0byBsYXN0IGVsZW1lbnQgdG8gc2NhbixcbiAgICAgIC8vIGJ1dCB0aGUgc3RyaW5nIGlzIGFscmVhZHkgb3ZlciBsZW5ndGggdGhlbiBicmVhayBoZXJlXG5cblxuICAgICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFBlZWsgYXQgdGhlIG5leHQgc3RyaW5nIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGRcbiAgICAgIC8vIGJyZWFrIGVhcmx5IGJlZm9yZSBhZGRpbmcgdGhpcyBpdGVtIHRvIHRoZSBvdXRwdXRcblxuXG4gICAgICBwZWVrID0gbGFzdCA/ICcnIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/ICcnIDogc2VwYXJhdG9yKTsgLy8gSWYgd2UgaGF2ZSBvbmUgZWxlbWVudCBsZWZ0LCBidXQgdGhpcyBlbGVtZW50IGFuZFxuICAgICAgLy8gdGhlIG5leHQgdGFrZXMgb3ZlciBsZW5ndGgsIHRoZSBicmVhayBlYXJseVxuXG4gICAgICBpZiAoIWxhc3QgJiYgc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gc3RyaW5nOyAvLyBJZiB0aGUgbmV4dCBlbGVtZW50IHRha2VzIHVzIHRvIGxlbmd0aCAtXG4gICAgICAvLyBidXQgdGhlcmUgYXJlIG1vcmUgYWZ0ZXIgdGhhdCwgdGhlbiB3ZSBzaG91bGQgdHJ1bmNhdGUgbm93XG5cbiAgICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgICB0cnVuY2F0ZWQgPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQobGlzdC5sZW5ndGggLSBpIC0gMSwgXCIpXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdHJ1bmNhdGVkID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG91dHB1dCkuY29uY2F0KHRydW5jYXRlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gICAgaWYgKGtleS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLykpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSkucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFByb3BlcnR5KF9yZWYyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgICBrZXkgPSBfcmVmM1swXSxcbiAgICAgICAgdmFsdWUgPSBfcmVmM1sxXTtcblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gMjtcblxuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gcXVvdGVDb21wbGV4S2V5KGtleSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ICE9PSAnbnVtYmVyJykge1xuICAgICAga2V5ID0gXCJbXCIuY29uY2F0KG9wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpLCBcIl1cIik7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICAgIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5LCBcIjogXCIpLmNvbmNhdCh2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgICAvLyBPYmplY3Qua2V5cyB3aWxsIGFsd2F5cyBvdXRwdXQgdGhlIEFycmF5IGluZGljZXMgZmlyc3QsIHNvIHdlIGNhbiBzbGljZSBieVxuICAgIC8vIGBhcnJheS5sZW5ndGhgIHRvIGdldCBub24taW5kZXggcHJvcGVydGllc1xuICAgIHZhciBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuICdbXSc7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICAgIHZhciBsaXN0Q29udGVudHMgPSBpbnNwZWN0TGlzdChhcnJheSwgb3B0aW9ucyk7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gJyc7XG5cbiAgICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gW2tleSwgYXJyYXlba2V5XV07XG4gICAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJbIFwiLmNvbmNhdChsaXN0Q29udGVudHMpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzID8gXCIsIFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKSA6ICcnLCBcIiBdXCIpO1xuICB9XG5cbiAgLyogIVxuICAgKiBDaGFpIC0gZ2V0RnVuY05hbWUgdXRpbGl0eVxuICAgKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICAgKiBNSVQgTGljZW5zZWRcbiAgICovXG5cbiAgLyoqXG4gICAqICMjIyAuZ2V0RnVuY05hbWUoY29uc3RydWN0b3JGbilcbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLlxuICAgKiBXaGVuIGEgbm9uLWZ1bmN0aW9uIGluc3RhbmNlIGlzIHBhc3NlZCwgcmV0dXJucyBgbnVsbGAuXG4gICAqIFRoaXMgYWxzbyBpbmNsdWRlcyBhIHBvbHlmaWxsIGZ1bmN0aW9uIGlmIGBhRnVuYy5uYW1lYCBpcyBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQG5hbWUgZ2V0RnVuY05hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY3RcbiAgICogQG5hbWVzcGFjZSBVdGlsc1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB2YXIgdG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBmdW5jdGlvbk5hbWVNYXRjaCA9IC9cXHMqZnVuY3Rpb24oPzpcXHN8XFxzKlxcL1xcKlteKD86KlxcLyldK1xcKlxcL1xccyopKihbXlxcc1xcKFxcL10rKS87XG4gIHZhciBtYXhGdW5jdGlvblNvdXJjZUxlbmd0aCA9IDUxMjtcbiAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoYUZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGFGdW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlLm5hbWUgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBhRnVuYy5uYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZWZsZWN0XG4gICAgICB2YXIgZnVuY3Rpb25Tb3VyY2UgPSB0b1N0cmluZy5jYWxsKGFGdW5jKTtcbiAgICAgIC8vIFRvIGF2b2lkIHVuY29uc3RyYWluZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gZHVlIHRvIHBhdGhhbG9naWNhbGx5IGxhcmdlIGZ1bmN0aW9uIG5hbWVzLFxuICAgICAgLy8gd2UgbGltaXQgdGhlIGF2YWlsYWJsZSByZXR1cm4gdmFsdWUgdG8gYmUgbGVzcyB0aGFuIDUxMiBjaGFyYWN0ZXJzLlxuICAgICAgaWYgKGZ1bmN0aW9uU291cmNlLmluZGV4T2YoJygnKSA+IG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgICAgLy8gSGVyZSB3ZSBydW4gYSBwb2x5ZmlsbCBpZiBGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgbmFtZWAgcHJvcGVydHkgYW5kIGlmIGFGdW5jLm5hbWUgaXMgbm90IGRlZmluZWRcbiAgICAgIHZhciBtYXRjaCA9IGZ1bmN0aW9uU291cmNlLm1hdGNoKGZ1bmN0aW9uTmFtZU1hdGNoKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBuYW1lID0gbWF0Y2hbMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGBuYW1lYCBwcm9wZXJ0eSB3ZSBqdXN0IHVzZSBpdFxuICAgICAgbmFtZSA9IGFGdW5jLm5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICB2YXIgZ2V0RnVuY05hbWVfMSA9IGdldEZ1bmNOYW1lO1xuXG4gIHZhciBnZXRBcnJheU5hbWUgPSBmdW5jdGlvbiBnZXRBcnJheU5hbWUoYXJyYXkpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBOb2RlLmpzJyBCdWZmZXJzLCB3aGljaCByZXBvcnQgdG8gYmUgVWludDhBcnJheVxuICAgIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIGFycmF5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICByZXR1cm4gJ0J1ZmZlcic7XG4gICAgfVxuXG4gICAgaWYgKGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ10pIHtcbiAgICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRGdW5jTmFtZV8xKGFycmF5LmNvbnN0cnVjdG9yKTtcbiAgfTtcblxuICBmdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICsgNDsgLy8gT2JqZWN0LmtleXMgd2lsbCBhbHdheXMgb3V0cHV0IHRoZSBBcnJheSBpbmRpY2VzIGZpcnN0LCBzbyB3ZSBjYW4gc2xpY2UgYnlcbiAgICAvLyBgYXJyYXkubGVuZ3RoYCB0byBnZXQgbm9uLWluZGV4IHByb3BlcnRpZXNcblxuICAgIHZhciBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiW11cIik7IC8vIEFzIHdlIGtub3cgVHlwZWRBcnJheXMgb25seSBjb250YWluIFVuc2lnbmVkIEludGVnZXJzLCB3ZSBjYW4gc2tpcCBpbnNwZWN0aW5nIGVhY2ggb25lIGFuZCBzaW1wbHlcbiAgICAvLyBzdHlsaXNlIHRoZSB0b1N0cmluZygpIHZhbHVlIG9mIHRoZW1cblxuICAgIHZhciBvdXRwdXQgPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdHJpbmcgPSBcIlwiLmNvbmNhdChvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoYXJyYXlbaV0sIG9wdGlvbnMudHJ1bmNhdGUpLCAnbnVtYmVyJykpLmNvbmNhdChpID09PSBhcnJheS5sZW5ndGggLSAxID8gJycgOiAnLCAnKTtcbiAgICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcblxuICAgICAgaWYgKGFycmF5W2ldICE9PSBhcnJheS5sZW5ndGggJiYgb3B0aW9ucy50cnVuY2F0ZSA8PSAzKSB7XG4gICAgICAgIG91dHB1dCArPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQoYXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxLCBcIilcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gJyc7XG5cbiAgICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gW2tleSwgYXJyYXlba2V5XV07XG4gICAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQobmFtZSwgXCJbIFwiKS5jb25jYXQob3V0cHV0KS5jb25jYXQocHJvcGVydHlDb250ZW50cyA/IFwiLCBcIi5jb25jYXQocHJvcGVydHlDb250ZW50cykgOiAnJywgXCIgXVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3REYXRlKGRhdGVPYmplY3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyaW5nUmVwcmVzZW50YXRpb24gPSBkYXRlT2JqZWN0LnRvSlNPTigpO1xuXG4gICAgaWYgKHN0cmluZ1JlcHJlc2VudGF0aW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ0ludmFsaWQgRGF0ZSc7XG4gICAgfVxuXG4gICAgdmFyIHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoJ1QnKTtcbiAgICB2YXIgZGF0ZSA9IHNwbGl0WzBdOyAvLyBJZiB3ZSBuZWVkIHRvIC0gdHJ1bmNhdGUgdGhlIHRpbWUgcG9ydGlvbiwgYnV0IG5ldmVyIHRoZSBkYXRlXG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiXCIuY29uY2F0KGRhdGUsIFwiVFwiKS5jb25jYXQodHJ1bmNhdGUoc3BsaXRbMV0sIG9wdGlvbnMudHJ1bmNhdGUgLSBkYXRlLmxlbmd0aCAtIDEpKSwgJ2RhdGUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RGdW5jdGlvbihmdW5jLCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSBnZXRGdW5jTmFtZV8xKGZ1bmMpO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdbRnVuY3Rpb25dJywgJ3NwZWNpYWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiW0Z1bmN0aW9uIFwiLmNvbmNhdCh0cnVuY2F0ZShuYW1lLCBvcHRpb25zLnRydW5jYXRlIC0gMTEpLCBcIl1cIiksICdzcGVjaWFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoX3JlZiwgb3B0aW9ucykge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBrZXkgPSBfcmVmMlswXSxcbiAgICAgICAgdmFsdWUgPSBfcmVmMlsxXTtcblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgICBrZXkgPSBvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gICAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiID0+IFwiKS5jb25jYXQodmFsdWUpO1xuICB9IC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IGBtYXAuZW50cmllcygpYFxuXG5cbiAgZnVuY3Rpb24gbWFwVG9FbnRyaWVzKG1hcCkge1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdE1hcChtYXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2l6ZSA9IG1hcC5zaXplIC0gMTtcblxuICAgIGlmIChzaXplIDw9IDApIHtcbiAgICAgIHJldHVybiAnTWFwe30nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgICByZXR1cm4gXCJNYXB7IFwiLmNvbmNhdChpbnNwZWN0TGlzdChtYXBUb0VudHJpZXMobWFwKSwgb3B0aW9ucywgaW5zcGVjdE1hcEVudHJ5KSwgXCIgfVwiKTtcbiAgfVxuXG4gIHZhciBpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpICE9PSBpO1xuICB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuXG5cbiAgZnVuY3Rpb24gaW5zcGVjdE51bWJlcihudW1iZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnTmFOJywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdJbmZpbml0eScsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJy1JbmZpbml0eScsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKDEgLyBudW1iZXIgPT09IEluZmluaXR5ID8gJyswJyA6ICctMCcsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKG51bWJlciwgb3B0aW9ucy50cnVuY2F0ZSksICdudW1iZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RCaWdJbnQobnVtYmVyLCBvcHRpb25zKSB7XG4gICAgdmFyIG51bXMgPSB0cnVuY2F0ZShudW1iZXIudG9TdHJpbmcoKSwgb3B0aW9ucy50cnVuY2F0ZSAtIDEpO1xuICAgIGlmIChudW1zICE9PSB0cnVuY2F0b3IpIG51bXMgKz0gJ24nO1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVtcywgJ2JpZ2ludCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFJlZ0V4cCh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHZhciBmbGFncyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICB2YXIgc291cmNlTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZSAtICgyICsgZmxhZ3MubGVuZ3RoKTtcbiAgICB2YXIgc291cmNlID0gdmFsdWUuc291cmNlO1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCIvXCIuY29uY2F0KHRydW5jYXRlKHNvdXJjZSwgc291cmNlTGVuZ3RoKSwgXCIvXCIpLmNvbmNhdChmbGFncyksICdyZWdleHAnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5RnJvbVNldChzZXQpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTZXQoc2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKHNldC5zaXplID09PSAwKSByZXR1cm4gJ1NldHt9JztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gICAgcmV0dXJuIFwiU2V0eyBcIi5jb25jYXQoaW5zcGVjdExpc3QoYXJyYXlGcm9tU2V0KHNldCksIG9wdGlvbnMpLCBcIiB9XCIpO1xuICB9XG5cbiAgdmFyIHN0cmluZ0VzY2FwZUNoYXJzID0gbmV3IFJlZ0V4cChcIlsnXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZcXFxcdTAwYWRcXFxcdTA2MDAtXFxcXHUwNjA0XFxcXHUwNzBmXFxcXHUxN2I0XFxcXHUxN2I1XCIgKyBcIlxcXFx1MjAwYy1cXFxcdTIwMGZcXFxcdTIwMjgtXFxcXHUyMDJmXFxcXHUyMDYwLVxcXFx1MjA2ZlxcXFx1ZmVmZlxcXFx1ZmZmMC1cXFxcdWZmZmZdXCIsICdnJyk7XG4gIHZhciBlc2NhcGVDaGFyYWN0ZXJzID0ge1xuICAgICdcXGInOiAnXFxcXGInLFxuICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICdcXHInOiAnXFxcXHInLFxuICAgIFwiJ1wiOiBcIlxcXFwnXCIsXG4gICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gIH07XG4gIHZhciBoZXggPSAxNjtcbiAgdmFyIHVuaWNvZGVMZW5ndGggPSA0O1xuXG4gIGZ1bmN0aW9uIGVzY2FwZShjaGFyKSB7XG4gICAgcmV0dXJuIGVzY2FwZUNoYXJhY3RlcnNbY2hhcl0gfHwgXCJcXFxcdVwiLmNvbmNhdChcIjAwMDBcIi5jb25jYXQoY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKGhleCkpLnNsaWNlKC11bmljb2RlTGVuZ3RoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuICAgIGlmIChzdHJpbmdFc2NhcGVDaGFycy50ZXN0KHN0cmluZykpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHN0cmluZ0VzY2FwZUNoYXJzLCBlc2NhcGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCInXCIuY29uY2F0KHRydW5jYXRlKHN0cmluZywgb3B0aW9ucy50cnVuY2F0ZSAtIDIpLCBcIidcIiksICdzdHJpbmcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTeW1ib2wodmFsdWUpIHtcbiAgICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2wucHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZGVzY3JpcHRpb24gPyBcIlN5bWJvbChcIi5jb25jYXQodmFsdWUuZGVzY3JpcHRpb24sIFwiKVwiKSA6ICdTeW1ib2woKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICB2YXIgZ2V0UHJvbWlzZVZhbHVlID0gZnVuY3Rpb24gZ2V0UHJvbWlzZVZhbHVlKCkge1xuICAgIHJldHVybiAnUHJvbWlzZXtcdTIwMjZ9JztcbiAgfTtcblxuICB0cnkge1xuICAgIHZhciBfcHJvY2VzcyRiaW5kaW5nID0gcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyksXG4gICAgICAgIGdldFByb21pc2VEZXRhaWxzID0gX3Byb2Nlc3MkYmluZGluZy5nZXRQcm9taXNlRGV0YWlscyxcbiAgICAgICAga1BlbmRpbmcgPSBfcHJvY2VzcyRiaW5kaW5nLmtQZW5kaW5nLFxuICAgICAgICBrUmVqZWN0ZWQgPSBfcHJvY2VzcyRiaW5kaW5nLmtSZWplY3RlZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGdldFByb21pc2VEZXRhaWxzKFByb21pc2UucmVzb2x2ZSgpKSkpIHtcbiAgICAgIGdldFByb21pc2VWYWx1ZSA9IGZ1bmN0aW9uIGdldFByb21pc2VWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2dldFByb21pc2VEZXRhaWxzID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpLFxuICAgICAgICAgICAgX2dldFByb21pc2VEZXRhaWxzMiA9IF9zbGljZWRUb0FycmF5KF9nZXRQcm9taXNlRGV0YWlscywgMiksXG4gICAgICAgICAgICBzdGF0ZSA9IF9nZXRQcm9taXNlRGV0YWlsczJbMF0sXG4gICAgICAgICAgICBpbm5lclZhbHVlID0gX2dldFByb21pc2VEZXRhaWxzMlsxXTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGtQZW5kaW5nKSB7XG4gICAgICAgICAgcmV0dXJuICdQcm9taXNlezxwZW5kaW5nPn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiUHJvbWlzZVwiLmNvbmNhdChzdGF0ZSA9PT0ga1JlamVjdGVkID8gJyEnIDogJycsIFwie1wiKS5jb25jYXQob3B0aW9ucy5pbnNwZWN0KGlubmVyVmFsdWUsIG9wdGlvbnMpLCBcIn1cIik7XG4gICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAobm90Tm9kZSkge1xuICAgIC8qIGlnbm9yZSAqL1xuICB9XG5cbiAgdmFyIGluc3BlY3RQcm9taXNlID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4gIGZ1bmN0aW9uIGluc3BlY3RPYmplY3Qob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSA6IFtdO1xuXG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwICYmIHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJ3t9JztcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gICAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMuc2Vlbi5pbmRleE9mKG9iamVjdCkgPj0gMCkge1xuICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIFtrZXksIG9iamVjdFtrZXldXTtcbiAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB2YXIgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIG9wdGlvbnMuc2Vlbi5wb3AoKTtcbiAgICB2YXIgc2VwID0gJyc7XG5cbiAgICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgICAgc2VwID0gJywgJztcbiAgICB9XG5cbiAgICByZXR1cm4gXCJ7IFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKS5jb25jYXQoc2VwKS5jb25jYXQoc3ltYm9sQ29udGVudHMsIFwiIH1cIik7XG4gIH1cblxuICB2YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbiAgZnVuY3Rpb24gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSAnJztcblxuICAgIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgICAgbmFtZSA9IHZhbHVlW3RvU3RyaW5nVGFnXTtcbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZSB8fCBnZXRGdW5jTmFtZV8xKHZhbHVlLmNvbnN0cnVjdG9yKTsgLy8gQmFiZWwgdHJhbnNmb3JtcyBhbm9ueW1vdXMgY2xhc3NlcyB0byB0aGUgbmFtZSBgX2NsYXNzYFxuXG4gICAgaWYgKCFuYW1lIHx8IG5hbWUgPT09ICdfY2xhc3MnKSB7XG4gICAgICBuYW1lID0gJzxBbm9ueW1vdXMgQ2xhc3M+JztcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lKS5jb25jYXQoaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucykpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJ0FyZ3VtZW50c1tdJztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICAgIHJldHVybiBcIkFyZ3VtZW50c1sgXCIuY29uY2F0KGluc3BlY3RMaXN0KGFyZ3MsIG9wdGlvbnMpLCBcIiBdXCIpO1xuICB9XG5cbiAgdmFyIGVycm9yS2V5cyA9IFsnc3RhY2snLCAnbGluZScsICdjb2x1bW4nLCAnbmFtZScsICdtZXNzYWdlJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnY29sdW1uTnVtYmVyJywgJ251bWJlcicsICdkZXNjcmlwdGlvbiddO1xuICBmdW5jdGlvbiBpbnNwZWN0T2JqZWN0JDEoZXJyb3IsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGVycm9yS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuICAgIHZhciBuYW1lID0gZXJyb3IubmFtZTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICAgIHZhciBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BlcnRpZXMudW5zaGlmdCgnbWVzc2FnZScpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlID8gXCI6IFwiLmNvbmNhdChtZXNzYWdlKSA6ICcnO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbWVzc2FnZS5sZW5ndGggKyA1O1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIFtrZXksIGVycm9yW2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KHByb3BlcnR5Q29udGVudHMgPyBcIiB7IFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzLCBcIiB9XCIpIDogJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEF0dHJpYnV0ZShfcmVmLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYyWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSAzO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShrZXksICd5ZWxsb3cnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShrZXksICd5ZWxsb3cnKSwgXCI9XCIpLmNvbmNhdChvcHRpb25zLnN0eWxpemUoXCJcXFwiXCIuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksICdzdHJpbmcnKSk7XG4gIH1cbiAgZnVuY3Rpb24gaW5zcGVjdEhUTUxDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdEhUTUwsICdcXG4nKTtcbiAgfVxuICBmdW5jdGlvbiBpbnNwZWN0SFRNTChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7XG4gICAgdmFyIG5hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgaGVhZCA9IG9wdGlvbnMuc3R5bGl6ZShcIjxcIi5jb25jYXQobmFtZSksICdzcGVjaWFsJyk7XG4gICAgdmFyIGhlYWRDbG9zZSA9IG9wdGlvbnMuc3R5bGl6ZShcIj5cIiwgJ3NwZWNpYWwnKTtcbiAgICB2YXIgdGFpbCA9IG9wdGlvbnMuc3R5bGl6ZShcIjwvXCIuY29uY2F0KG5hbWUsIFwiPlwiKSwgJ3NwZWNpYWwnKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnR5Q29udGVudHMgKz0gJyAnO1xuICAgICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0QXR0cmlidXRlLCAnICcpO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gcHJvcGVydHlDb250ZW50cy5sZW5ndGg7XG4gICAgdmFyIHRydW5jYXRlID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSBpbnNwZWN0SFRNTENvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG5cbiAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gdHJ1bmNhdGUpIHtcbiAgICAgIGNoaWxkcmVuID0gXCJcIi5jb25jYXQodHJ1bmNhdG9yLCBcIihcIikuY29uY2F0KGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCBcIilcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGhlYWQpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKS5jb25jYXQoaGVhZENsb3NlKS5jb25jYXQoY2hpbGRyZW4pLmNvbmNhdCh0YWlsKTtcbiAgfVxuXG4gIHZhciBzeW1ib2xzU3VwcG9ydGVkID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJztcbiAgdmFyIGNoYWlJbnNwZWN0ID0gc3ltYm9sc1N1cHBvcnRlZCA/IFN5bWJvbC5mb3IoJ2NoYWkvaW5zcGVjdCcpIDogJ0BAY2hhaS9pbnNwZWN0JztcbiAgdmFyIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICB2YXIgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbiAgICBub2RlSW5zcGVjdCA9IG5vZGVVdGlsLmluc3BlY3QgPyBub2RlVXRpbC5pbnNwZWN0LmN1c3RvbSA6IGZhbHNlO1xuICB9IGNhdGNoIChub05vZGVJbnNwZWN0KSB7XG4gICAgbm9kZUluc3BlY3QgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEZha2VNYXAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgIHRoaXMua2V5ID0gJ2NoYWkvbG91cGVfXycgKyBNYXRoLnJhbmRvbSgpICsgRGF0ZS5ub3coKTtcbiAgfVxuXG4gIEZha2VNYXAucHJvdG90eXBlID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5W3RoaXMua2V5XTtcbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5rZXkgaW4ga2V5O1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMua2V5LCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yTWFwID0gbmV3ICh0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBGYWtlTWFwKSgpO1xuICB2YXIgc3RyaW5nVGFnTWFwID0ge307XG4gIHZhciBiYXNlVHlwZXNNYXAgPSB7XG4gICAgdW5kZWZpbmVkOiBmdW5jdGlvbiB1bmRlZmluZWQkMSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICAgIH0sXG4gICAgbnVsbDogZnVuY3Rpb24gX251bGwodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVsbCwgJ251bGwnKTtcbiAgICB9LFxuICAgIGJvb2xlYW46IGZ1bmN0aW9uIGJvb2xlYW4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodmFsdWUsICdib29sZWFuJyk7XG4gICAgfSxcbiAgICBCb29sZWFuOiBmdW5jdGlvbiBCb29sZWFuKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHZhbHVlLCAnYm9vbGVhbicpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICAgIE51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgICBiaWdpbnQ6IGluc3BlY3RCaWdJbnQsXG4gICAgQmlnSW50OiBpbnNwZWN0QmlnSW50LFxuICAgIHN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgICBTdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gICAgZnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgICBGdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICAgIHN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgICAvLyBBIFN5bWJvbCBwb2x5ZmlsbCB3aWxsIHJldHVybiBgU3ltYm9sYCBub3QgYHN5bWJvbGAgZnJvbSB0eXBlZGV0ZWN0XG4gICAgU3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAgIEFycmF5OiBpbnNwZWN0QXJyYXksXG4gICAgRGF0ZTogaW5zcGVjdERhdGUsXG4gICAgTWFwOiBpbnNwZWN0TWFwLFxuICAgIFNldDogaW5zcGVjdFNldCxcbiAgICBSZWdFeHA6IGluc3BlY3RSZWdFeHAsXG4gICAgUHJvbWlzZTogaW5zcGVjdFByb21pc2UsXG4gICAgLy8gV2Vha1NldCwgV2Vha01hcCBhcmUgdG90YWxseSBvcGFxdWUgdG8gdXNcbiAgICBXZWFrU2V0OiBmdW5jdGlvbiBXZWFrU2V0KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdXZWFrU2V0e1x1MjAyNn0nLCAnc3BlY2lhbCcpO1xuICAgIH0sXG4gICAgV2Vha01hcDogZnVuY3Rpb24gV2Vha01hcCh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnV2Vha01hcHtcdTIwMjZ9JywgJ3NwZWNpYWwnKTtcbiAgICB9LFxuICAgIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgICBJbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBJbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBVaW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEZsb2F0MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBHZW5lcmF0b3I6IGZ1bmN0aW9uIEdlbmVyYXRvcigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIERhdGFWaWV3OiBmdW5jdGlvbiBEYXRhVmlldygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIEFycmF5QnVmZmVyOiBmdW5jdGlvbiBBcnJheUJ1ZmZlcigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIEVycm9yOiBpbnNwZWN0T2JqZWN0JDEsXG4gICAgSFRNTENvbGxlY3Rpb246IGluc3BlY3RIVE1MQ29sbGVjdGlvbixcbiAgICBOb2RlTGlzdDogaW5zcGVjdEhUTUxDb2xsZWN0aW9uXG4gIH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cbiAgdmFyIGluc3BlY3RDdXN0b20gPSBmdW5jdGlvbiBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlKSB7XG4gICAgaWYgKGNoYWlJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtjaGFpSW5zcGVjdF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZVtjaGFpSW5zcGVjdF0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVJbnNwZWN0ICYmIG5vZGVJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtub2RlSW5zcGVjdF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZVtub2RlSW5zcGVjdF0ob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdpbnNwZWN0JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmluc3BlY3Qob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdjb25zdHJ1Y3RvcicgaW4gdmFsdWUgJiYgY29uc3RydWN0b3JNYXAuaGFzKHZhbHVlLmNvbnN0cnVjdG9yKSkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTWFwLmdldCh2YWx1ZS5jb25zdHJ1Y3RvcikodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdUYWdNYXBbdHlwZV0pIHtcbiAgICAgIHJldHVybiBzdHJpbmdUYWdNYXBbdHlwZV0odmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICB2YXIgdG9TdHJpbmckMSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cbiAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgICAgY3VzdG9tSW5zcGVjdCA9IF9vcHRpb25zLmN1c3RvbUluc3BlY3Q7XG4gICAgdmFyIHR5cGUgPSB2YWx1ZSA9PT0gbnVsbCA/ICdudWxsJyA6IF90eXBlb2YodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0eXBlID0gdG9TdHJpbmckMS5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XG4gICAgfSAvLyBJZiBpdCBpcyBhIGJhc2UgdmFsdWUgdGhhdCB3ZSBhbHJlYWR5IHN1cHBvcnQsIHRoZW4gdXNlIExvdXBlJ3MgaW5zcGVjdG9yXG5cblxuICAgIGlmIChiYXNlVHlwZXNNYXBbdHlwZV0pIHtcbiAgICAgIHJldHVybiBiYXNlVHlwZXNNYXBbdHlwZV0odmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gSWYgYG9wdGlvbnMuY3VzdG9tSW5zcGVjdGAgaXMgc2V0IHRvIHRydWUgdGhlbiB0cnkgdG8gdXNlIHRoZSBjdXN0b20gaW5zcGVjdG9yXG5cblxuICAgIGlmIChjdXN0b21JbnNwZWN0ICYmIHZhbHVlKSB7XG4gICAgICB2YXIgb3V0cHV0ID0gaW5zcGVjdEN1c3RvbSh2YWx1ZSwgb3B0aW9ucywgdHlwZSk7XG5cbiAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gb3V0cHV0O1xuICAgICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlOyAvLyBJZiBpdCdzIGEgcGxhaW4gT2JqZWN0IHRoZW4gdXNlIExvdXBlJ3MgaW5zcGVjdG9yXG5cbiAgICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIFNwZWNpZmljYWxseSBhY2NvdW50IGZvciBIVE1MRWxlbWVudHNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICgnY29uc3RydWN0b3InIGluIHZhbHVlKSB7XG4gICAgICAvLyBJZiBpdCBpcyBhIGNsYXNzLCBpbnNwZWN0IGl0IGxpa2UgYW4gb2JqZWN0IGJ1dCBhZGQgdGhlIGNvbnN0cnVjdG9yIG5hbWVcbiAgICAgIGlmICh2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSAvLyBJZiBpdCBpcyBhbiBvYmplY3Qgd2l0aCBhbiBhbm9ueW1vdXMgcHJvdG90eXBlLCBkaXNwbGF5IGl0IGFzIGFuIG9iamVjdC5cblxuXG4gICAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfSAvLyBsYXN0IGNoYW5jZSB0byBjaGVjayBpZiBpdCdzIGFuIG9iamVjdFxuXG5cbiAgICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIFdlIGhhdmUgcnVuIG91dCBvZiBvcHRpb25zISBKdXN0IHN0cmluZ2lmeSB0aGUgdmFsdWVcblxuXG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlKTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlckNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLCBpbnNwZWN0b3IpIHtcbiAgICBpZiAoY29uc3RydWN0b3JNYXAuaGFzKGNvbnN0cnVjdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yTWFwLnNldChjb25zdHJ1Y3RvciwgaW5zcGVjdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlclN0cmluZ1RhZyhzdHJpbmdUYWcsIGluc3BlY3Rvcikge1xuICAgIGlmIChzdHJpbmdUYWcgaW4gc3RyaW5nVGFnTWFwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RyaW5nVGFnTWFwW3N0cmluZ1RhZ10gPSBpbnNwZWN0b3I7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGN1c3RvbSA9IGNoYWlJbnNwZWN0O1xuXG4gIGV4cG9ydHMuY3VzdG9tID0gY3VzdG9tO1xuICBleHBvcnRzLmRlZmF1bHQgPSBpbnNwZWN0O1xuICBleHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuICBleHBvcnRzLnJlZ2lzdGVyQ29uc3RydWN0b3IgPSByZWdpc3RlckNvbnN0cnVjdG9yO1xuICBleHBvcnRzLnJlZ2lzdGVyU3RyaW5nVGFnID0gcmVnaXN0ZXJTdHJpbmdUYWc7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5pbmNsdWRlU3RhY2tcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBzdGFjayB0cmFjZVxuICAgKiBpcyBpbmNsdWRlZCBpbiBBc3NlcnRpb24gZXJyb3IgbWVzc2FnZS4gRGVmYXVsdCBvZiBmYWxzZVxuICAgKiBzdXBwcmVzc2VzIHN0YWNrIHRyYWNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrID0gdHJ1ZTsgIC8vIGVuYWJsZSBzdGFjayBvbiBlcnJvclxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGluY2x1ZGVTdGFjazogZmFsc2UsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgc2hvd0RpZmY6IHRydWUsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGRcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIHNldHMgbGVuZ3RoIHRocmVzaG9sZCBmb3IgYWN0dWFsIGFuZFxuICAgKiBleHBlY3RlZCB2YWx1ZXMgaW4gYXNzZXJ0aW9uIGVycm9ycy4gSWYgdGhpcyB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIGZvclxuICAgKiBleGFtcGxlIGZvciBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZ1xuICAgKiBsaWtlIGBbIEFycmF5KDMpIF1gIG9yIGB7IE9iamVjdCAocHJvcDEsIHByb3AyKSB9YC5cbiAgICpcbiAgICogU2V0IGl0IHRvIHplcm8gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0cnVuY2F0aW5nIGFsdG9nZXRoZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VyZnVsIHdoZW4gZG9pbmcgYXNzZXJ0aW9ucyBvbiBhcnJheXM6IGhhdmluZyB0aGlzXG4gICAqIHNldCB0byBhIHJlYXNvbmFibGUgbGFyZ2UgdmFsdWUgbWFrZXMgdGhlIGZhaWx1cmUgbWVzc2FnZXMgcmVhZGlseVxuICAgKiBpbnNwZWN0YWJsZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID0gMDsgIC8vIGRpc2FibGUgdHJ1bmNhdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgdHJ1bmNhdGVUaHJlc2hvbGQ6IDQwLFxuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnVzZVByb3h5XG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIGlmIGNoYWkgd2lsbCB1c2UgYSBQcm94eSB0byB0aHJvd1xuICAgKiBhbiBlcnJvciB3aGVuIGEgbm9uLWV4aXN0ZW50IHByb3BlcnR5IGlzIHJlYWQsIHdoaWNoIHByb3RlY3RzIHVzZXJzXG4gICAqIGZyb20gdHlwb3Mgd2hlbiB1c2luZyBwcm9wZXJ0eS1iYXNlZCBhc3NlcnRpb25zLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy51c2VQcm94eSA9IGZhbHNlOyAgLy8gZGlzYWJsZSB1c2Ugb2YgUHJveHlcbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyB2YWx1ZVxuICAgKiBpbiBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IHByb3hpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgdXNlUHJveHk6IHRydWUsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgcHJveHlFeGNsdWRlZEtleXM6IFsndGhlbicsICdjYXRjaCcsICdpbnNwZWN0JywgJ3RvSlNPTiddLFxuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgcmV0dXJuIGNoYWkudXRpbC5lcWwoZXhwZWN0ZWQsIGFjdHVhbCwge1xuICAgKiAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgIH1cbiAgICogICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBkZWVwRXF1YWw6IG51bGxcblxufTtcbiIsICIvLyBUaGlzIGlzIChhbG1vc3QpIGRpcmVjdGx5IGZyb20gTm9kZS5qcyB1dGlsc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvZjhjMzM1ZDBjYWY0N2YxNmQzMTQxM2Y4OWFhMjhlZGEzODc4ZTNhYS9saWIvdXRpbC5qc1xuXG52YXIgZ2V0TmFtZSA9IHJlcXVpcmUoJ2dldC1mdW5jLW5hbWUnKTtcbnZhciBsb3VwZSA9IHJlcXVpcmUoJ2xvdXBlJyk7XG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zcGVjdDtcblxuLyoqXG4gKiAjIyMgLmluc3BlY3Qob2JqLCBbc2hvd0hpZGRlbl0sIFtkZXB0aF0sIFtjb2xvcnNdKVxuICpcbiAqIEVjaG9lcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJpZXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2hvd0hpZGRlbiBGbGFnIHRoYXQgc2hvd3MgaGlkZGVuIChub3QgZW51bWVyYWJsZSlcbiAqICAgIHByb3BlcnRpZXMgb2Ygb2JqZWN0cy4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCBEZXB0aCBpbiB3aGljaCB0byBkZXNjZW5kIGluIG9iamVjdC4gRGVmYXVsdCBpcyAyLlxuICogQHBhcmFtIHtCb29sZWFufSBjb2xvcnMgRmxhZyB0byB0dXJuIG9uIEFOU0kgZXNjYXBlIGNvZGVzIHRvIGNvbG9yIHRoZVxuICogICAgb3V0cHV0LiBEZWZhdWx0IGlzIGZhbHNlIChubyBjb2xvcmluZykuXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBpbnNwZWN0XG4gKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGNvbG9yczogY29sb3JzLFxuICAgIGRlcHRoOiAodHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJyA/IDIgOiBkZXB0aCksXG4gICAgc2hvd0hpZGRlbjogc2hvd0hpZGRlbixcbiAgICB0cnVuY2F0ZTogY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID8gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkIDogSW5maW5pdHksXG4gIH07XG4gIHJldHVybiBsb3VwZS5pbnNwZWN0KG9iaiwgb3B0aW9ucyk7XG59XG4iLCAiLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGluc3BlY3QgPSByZXF1aXJlKCcuL2luc3BlY3QnKTtcbnZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcblxuLyoqXG4gKiAjIyMgLm9iakRpc3BsYXkob2JqZWN0KVxuICpcbiAqIERldGVybWluZXMgaWYgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG1hdGNoZXNcbiAqIGNyaXRlcmlhIHRvIGJlIGluc3BlY3RlZCBpbi1saW5lIGZvciBlcnJvclxuICogbWVzc2FnZXMgb3Igc2hvdWxkIGJlIHRydW5jYXRlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBqYXZhc2NyaXB0IG9iamVjdCB0byBpbnNwZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmdpZmllZCBvYmplY3RcbiAqIEBuYW1lIG9iakRpc3BsYXlcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvYmpEaXNwbGF5KG9iaikge1xuICB2YXIgc3RyID0gaW5zcGVjdChvYmopXG4gICAgLCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG5cbiAgaWYgKGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCAmJiBzdHIubGVuZ3RoID49IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCkge1xuICAgIGlmICh0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICByZXR1cm4gIW9iai5uYW1lIHx8IG9iai5uYW1lID09PSAnJ1xuICAgICAgICA/ICdbRnVuY3Rpb25dJ1xuICAgICAgICA6ICdbRnVuY3Rpb246ICcgKyBvYmoubmFtZSArICddJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybiAnWyBBcnJheSgnICsgb2JqLmxlbmd0aCArICcpIF0nO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAsIGtzdHIgPSBrZXlzLmxlbmd0aCA+IDJcbiAgICAgICAgICA/IGtleXMuc3BsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnLCAuLi4nXG4gICAgICAgICAgOiBrZXlzLmpvaW4oJywgJyk7XG4gICAgICByZXR1cm4gJ3sgT2JqZWN0ICgnICsga3N0ciArICcpIH0nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJylcbiAgLCBnZXRBY3R1YWwgPSByZXF1aXJlKCcuL2dldEFjdHVhbCcpXG4gICwgb2JqRGlzcGxheSA9IHJlcXVpcmUoJy4vb2JqRGlzcGxheScpO1xuXG4vKipcbiAqICMjIyAuZ2V0TWVzc2FnZShvYmplY3QsIG1lc3NhZ2UsIG5lZ2F0ZU1lc3NhZ2UpXG4gKlxuICogQ29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGZsYWdzXG4gKiBhbmQgdGVtcGxhdGUgdGFncy4gVGVtcGxhdGUgdGFncyB3aWxsIHJldHVyblxuICogYSBzdHJpbmdpZmllZCBpbnNwZWN0aW9uIG9mIHRoZSBvYmplY3QgcmVmZXJlbmNlZC5cbiAqXG4gKiBNZXNzYWdlIHRlbXBsYXRlIHRhZ3M6XG4gKiAtIGAje3RoaXN9YCBjdXJyZW50IGFzc2VydGVkIG9iamVjdFxuICogLSBgI3thY3R9YCBhY3R1YWwgdmFsdWVcbiAqIC0gYCN7ZXhwfWAgZXhwZWN0ZWQgdmFsdWVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE1lc3NhZ2VcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRNZXNzYWdlKG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosICduZWdhdGUnKVxuICAgICwgdmFsID0gZmxhZyhvYmosICdvYmplY3QnKVxuICAgICwgZXhwZWN0ZWQgPSBhcmdzWzNdXG4gICAgLCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKVxuICAgICwgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV1cbiAgICAsIGZsYWdNc2cgPSBmbGFnKG9iaiwgJ21lc3NhZ2UnKTtcblxuICBpZih0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgJyc7XG4gIG1zZyA9IG1zZ1xuICAgIC5yZXBsYWNlKC8jXFx7dGhpc1xcfS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmpEaXNwbGF5KHZhbCk7IH0pXG4gICAgLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqRGlzcGxheShhY3R1YWwpOyB9KVxuICAgIC5yZXBsYWNlKC8jXFx7ZXhwXFx9L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iakRpc3BsYXkoZXhwZWN0ZWQpOyB9KTtcblxuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnICsgbXNnIDogbXNnO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSB0cmFuc2ZlckZsYWdzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCA9IHRydWUpXG4gKlxuICogVHJhbnNmZXIgYWxsIHRoZSBmbGFncyBmb3IgYGFzc2VydGlvbmAgdG8gYG9iamVjdGAuIElmXG4gKiBgaW5jbHVkZUFsbGAgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIGJhc2UgQ2hhaVxuICogYXNzZXJ0aW9uIGZsYWdzIChuYW1lbHkgYG9iamVjdGAsIGBzc2ZpYCwgYGxvY2tTc2ZpYCxcbiAqIGFuZCBgbWVzc2FnZWApIHdpbGwgbm90IGJlIHRyYW5zZmVycmVkLlxuICpcbiAqXG4gKiAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAqICAgICB1dGlscy50cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgbmV3QXNzZXJ0aW9uKTtcbiAqXG4gKiAgICAgdmFyIGFub3RoZXJBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKG15T2JqKTtcbiAqICAgICB1dGlscy50cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgYW5vdGhlckFzc2VydGlvbiwgZmFsc2UpO1xuICpcbiAqIEBwYXJhbSB7QXNzZXJ0aW9ufSBhc3NlcnRpb24gdGhlIGFzc2VydGlvbiB0byB0cmFuc2ZlciB0aGUgZmxhZ3MgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0aGUgb2JqZWN0IHRvIHRyYW5zZmVyIHRoZSBmbGFncyB0bzsgdXN1YWxseSBhIG5ldyBhc3NlcnRpb25cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkZUFsbFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgdHJhbnNmZXJGbGFnc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgb2JqZWN0LCBpbmNsdWRlQWxsKSB7XG4gIHZhciBmbGFncyA9IGFzc2VydGlvbi5fX2ZsYWdzIHx8IChhc3NlcnRpb24uX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpbmNsdWRlQWxsID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IGluY2x1ZGVBbGwgOiB0cnVlO1xuXG4gIGZvciAodmFyIGZsYWcgaW4gZmxhZ3MpIHtcbiAgICBpZiAoaW5jbHVkZUFsbCB8fFxuICAgICAgICAoZmxhZyAhPT0gJ29iamVjdCcgJiYgZmxhZyAhPT0gJ3NzZmknICYmIGZsYWcgIT09ICdsb2NrU3NmaScgJiYgZmxhZyAhPSAnbWVzc2FnZScpKSB7XG4gICAgICBvYmplY3QuX19mbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWxzIFN5bWJvbDogZmFsc2UsIFVpbnQ4QXJyYXk6IGZhbHNlLCBXZWFrTWFwOiBmYWxzZSAqL1xuLyohXG4gKiBkZWVwLWVxbFxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSAnY2hhaS9kZWVwLWVxbF9fJyArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xufVxuXG5GYWtlTWFwLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxufTtcblxudmFyIE1lbW9pemVNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBGYWtlTWFwO1xuLyohXG4gKiBDaGVjayB0byBzZWUgaWYgdGhlIE1lbW9pemVNYXAgaGFzIHJlY29yZGVkIGEgcmVzdWx0IG9mIHRoZSB0d28gb3BlcmFuZHNcbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICogQHJldHVybnMge0Jvb2xlYW58bnVsbH0gcmVzdWx0XG4qL1xuZnVuY3Rpb24gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwKSB7XG4gIC8vIFRlY2huaWNhbGx5LCBXZWFrTWFwIGtleXMgY2FuICpvbmx5KiBiZSBvYmplY3RzLCBub3QgcHJpbWl0aXZlcy5cbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICB2YXIgcmVzdWx0ID0gbGVmdEhhbmRNYXAuZ2V0KHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiFcbiAqIFNldCB0aGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSBpbnRvIHRoZSBNZW1vaXplTWFwXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzdWx0XG4qL1xuZnVuY3Rpb24gbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXAsIHJlc3VsdCkge1xuICAvLyBUZWNobmljYWxseSwgV2Vha01hcCBrZXlzIGNhbiAqb25seSogYmUgb2JqZWN0cywgbm90IHByaW1pdGl2ZXMuXG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIGxlZnRIYW5kTWFwID0gbmV3IE1lbW9pemVNYXAoKTtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgICBtZW1vaXplTWFwLnNldChsZWZ0SGFuZE9wZXJhbmQsIGxlZnRIYW5kTWFwKTtcbiAgfVxufVxuXG4vKiFcbiAqIFByaW1hcnkgRXhwb3J0XG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwRXF1YWw7XG5tb2R1bGUuZXhwb3J0cy5NZW1vaXplTWFwID0gTWVtb2l6ZU1hcDtcblxuLyoqXG4gKiBBc3NlcnQgZGVlcGx5IG5lc3RlZCBzYW1lVmFsdWUgZXF1YWxpdHkgYmV0d2VlbiB0d28gb2JqZWN0cyBvZiBhbnkgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNvbXBhcmF0b3JdIChvcHRpb25hbCkgT3ZlcnJpZGUgZGVmYXVsdCBhbGdvcml0aG0sIGRldGVybWluaW5nIGN1c3RvbSBlcXVhbGl0eS5cbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLm1lbW9pemVdIChvcHRpb25hbCkgUHJvdmlkZSBhIGN1c3RvbSBtZW1vaXphdGlvbiBvYmplY3Qgd2hpY2ggd2lsbCBjYWNoZSB0aGUgcmVzdWx0cyBvZlxuICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgIHJlZmVyZW5jZXMgdG8gYmxvdyB0aGUgc3RhY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuICovXG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIC8vIElmIHdlIGhhdmUgYSBjb21wYXJhdG9yLCB3ZSBjYW4ndCBhc3N1bWUgYW55dGhpbmc7IHNvIGJhaWwgdG8gaXRzIGNoZWNrIGZpcnN0LlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cblxuICAvLyBEZWVwZXIgY29tcGFyaXNvbnMgYXJlIHB1c2hlZCB0aHJvdWdoIHRvIGEgbGFyZ2VyIGZ1bmN0aW9uXG4gIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBNYW55IGNvbXBhcmlzb25zIGNhbiBiZSBjYW5jZWxlZCBvdXQgZWFybHkgdmlhIHNpbXBsZSBlcXVhbGl0eSBvciBwcmltaXRpdmUgY2hlY2tzLlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcmV0dXJuIHtCb29sZWFufG51bGx9IGVxdWFsIG1hdGNoXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICAvLyBFcXVhbCByZWZlcmVuY2VzIChleGNlcHQgZm9yIE51bWJlcnMpIGNhbiBiZSByZXR1cm5lZCBlYXJseVxuICBpZiAobGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kKSB7XG4gICAgLy8gSGFuZGxlICstMCBjYXNlc1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cblxuICAvLyBoYW5kbGUgTmFOIGNhc2VzXG4gIGlmIChcbiAgICBsZWZ0SGFuZE9wZXJhbmQgIT09IGxlZnRIYW5kT3BlcmFuZCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBBbnl0aGluZyB0aGF0IGlzIG5vdCBhbiAnb2JqZWN0JywgaS5lLiBzeW1ib2xzLCBmdW5jdGlvbnMsIGJvb2xlYW5zLCBudW1iZXJzLFxuICAvLyBzdHJpbmdzLCBhbmQgdW5kZWZpbmVkLCBjYW4gYmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlLlxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIC8vIEVhc3kgb3V0IGIvYyBpdCB3b3VsZCBoYXZlIHBhc3NlZCB0aGUgZmlyc3QgZXF1YWxpdHkgY2hlY2tcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qIVxuICogVGhlIG1haW4gbG9naWMgb2YgdGhlIGBkZWVwRXF1YWxgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAob3B0aW9uYWwpIEFkZGl0aW9uYWwgb3B0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubWVtb2l6ZV0gKG9wdGlvbmFsKSBQcm92aWRlIGEgY3VzdG9tIG1lbW9pemF0aW9uIG9iamVjdCB3aGljaCB3aWxsIGNhY2hlIHRoZSByZXN1bHRzIG9mXG4gICAgY29tcGxleCBvYmplY3RzIGZvciBhIHNwZWVkIGJvb3N0LiBCeSBwYXNzaW5nIGBmYWxzZWAgeW91IGNhbiBkaXNhYmxlIG1lbW9pemF0aW9uLCBidXQgdGhpcyB3aWxsIGNhdXNlIGNpcmN1bGFyXG4gICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIG1hdGNoXG4qL1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5tZW1vaXplID0gb3B0aW9ucy5tZW1vaXplID09PSBmYWxzZSA/IGZhbHNlIDogb3B0aW9ucy5tZW1vaXplIHx8IG5ldyBNZW1vaXplTWFwKCk7XG4gIHZhciBjb21wYXJhdG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3I7XG5cbiAgLy8gQ2hlY2sgaWYgYSBtZW1vaXplZCByZXN1bHQgZXhpc3RzLlxuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuXG4gIC8vIElmIGEgY29tcGFyYXRvciBpcyBwcmVzZW50LCB1c2UgaXQuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgdmFyIGNvbXBhcmF0b3JSZXN1bHQgPSBjb21wYXJhdG9yKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgLy8gQ29tcGFyYXRvcnMgbWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gZ28gYmFjayB0byBkZWZhdWx0IGJlaGF2aW9yLlxuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICAvLyBUbyBhbGxvdyBjb21wYXJhdG9ycyB0byBvdmVycmlkZSAqYW55KiBiZWhhdmlvciwgd2UgcmFuIHRoZW0gZmlyc3QuIFNpbmNlIGl0IGRpZG4ndCBkZWNpZGVcbiAgICAvLyB3aGF0IHRvIGRvLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byByZXR1cm4gdGhlIGJhc2ljIHRlc3RzIGZpcnN0IGJlZm9yZSB3ZSBtb3ZlIG9uLlxuICAgIHZhciBzaW1wbGVSZXN1bHQgPSBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IG1lbW9pemUgdGhpcywgaXQgdGFrZXMgbG9uZ2VyIHRvIHNldC9yZXRyaWV2ZSB0aGFuIHRvIGp1c3QgY29tcGFyZS5cbiAgICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxlZnRIYW5kVHlwZSA9IHR5cGUobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIGZhbHNlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wb3JhcmlseSBzZXQgdGhlIG9wZXJhbmRzIGluIHRoZSBtZW1vaXplIG9iamVjdCB0byBwcmV2ZW50IGJsb3dpbmcgdGhlIHN0YWNrXG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuXG4gIHZhciByZXN1bHQgPSBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpO1xuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChsZWZ0SGFuZFR5cGUpIHtcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgIGNhc2UgJ051bWJlcic6XG4gICAgY2FzZSAnQm9vbGVhbic6XG4gICAgY2FzZSAnRGF0ZSc6XG4gICAgICAvLyBJZiB0aGVzZSB0eXBlcyBhcmUgdGhlaXIgaW5zdGFuY2UgdHlwZXMgKGUuZy4gYG5ldyBOdW1iZXJgKSB0aGVuIHJlLWRlZXBFcXVhbCBhZ2FpbnN0IHRoZWlyIHZhbHVlc1xuICAgICAgcmV0dXJuIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQudmFsdWVPZigpLCByaWdodEhhbmRPcGVyYW5kLnZhbHVlT2YoKSk7XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnU3ltYm9sJzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBbICduYW1lJywgJ21lc3NhZ2UnLCAnY29kZScgXSwgb3B0aW9ucyk7XG4gICAgY2FzZSAnQXJndW1lbnRzJzpcbiAgICBjYXNlICdJbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICBjYXNlICdJbnQxNkFycmF5JzpcbiAgICBjYXNlICdVaW50MTZBcnJheSc6XG4gICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgY2FzZSAnVWludDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQ2NEFycmF5JzpcbiAgICBjYXNlICdBcnJheSc6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlICdHZW5lcmF0b3InOlxuICAgICAgcmV0dXJuIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnRGF0YVZpZXcnOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kLmJ1ZmZlciksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQuYnVmZmVyKSwgb3B0aW9ucyk7XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnTWFwJzpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpbkRhdGUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5EYXRlVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuSW5zdGFudCc6XG4gICAgY2FzZSAnVGVtcG9yYWwuWm9uZWREYXRlVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGgnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluTW9udGhEYXknOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSAnVGVtcG9yYWwuRHVyYXRpb24nOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b3RhbCgnbmFub3NlY29uZHMnKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b3RhbCgnbmFub3NlY29uZHMnKTtcbiAgICBjYXNlICdUZW1wb3JhbC5UaW1lWm9uZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuQ2FsZW5kYXInOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qIVxuICogQ29tcGFyZSB0d28gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIHtSZWdFeHB9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtSZWdFeHB9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbn1cblxuLyohXG4gKiBDb21wYXJlIHR3byBTZXRzL01hcHMgZm9yIGVxdWFsaXR5LiBGYXN0ZXIgdGhhbiBvdGhlciBlcXVhbGl0eSBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtTZXR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBTZXQjZW50cmllcyBvciBTZXQjQEBpdGVyYXRvciwgc28gd2UgbmVlZCBtYW51YWxseSBwb3B1bGF0ZSB1c2luZyBTZXQjZm9yRWFjaFxuICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgIT09IHJpZ2h0SGFuZE9wZXJhbmQuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgbGVmdEhhbmRJdGVtcy5wdXNoKFsga2V5LCB2YWx1ZSBdKTtcbiAgfSk7XG4gIHJpZ2h0SGFuZE9wZXJhbmQuZm9yRWFjaChmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICByaWdodEhhbmRJdGVtcy5wdXNoKFsga2V5LCB2YWx1ZSBdKTtcbiAgfSk7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kSXRlbXMuc29ydCgpLCByaWdodEhhbmRJdGVtcy5zb3J0KCksIG9wdGlvbnMpO1xufVxuXG4vKiFcbiAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZmxhdCBpdGVyYWJsZSBvYmplY3RzIHN1Y2ggYXMgQXJyYXlzLCBUeXBlZEFycmF5cyBvciBOb2RlLmpzIGJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBsZWZ0SGFuZE9wZXJhbmQubGVuZ3RoO1xuICBpZiAobGVuZ3RoICE9PSByaWdodEhhbmRPcGVyYW5kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRbaW5kZXhdLCByaWdodEhhbmRPcGVyYW5kW2luZGV4XSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiFcbiAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMgc3VjaCBhcyB0aG9zZSByZXR1cm5lZCBieSBnZW5lcmF0b3IgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBnZW5lcmF0b3JFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwoZ2V0R2VuZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpLCBnZXRHZW5lcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbn1cblxuLyohXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyohXG4gKiBHZXRzIGFsbCBpdGVyYXRvciBlbnRyaWVzIGZyb20gdGhlIGdpdmVuIE9iamVjdC4gSWYgdGhlIE9iamVjdCBoYXMgbm8gQEBpdGVyYXRvciBmdW5jdGlvbiwgcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAqIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBpdGVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzIGRlcGVuZGluZyBvbiB0aGUgQEBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgQEBpdGVyYXRvciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBnZXRJdGVyYXRvckVudHJpZXModGFyZ2V0KSB7XG4gIGlmIChoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGdldEdlbmVyYXRvckVudHJpZXModGFyZ2V0W1N5bWJvbC5pdGVyYXRvcl0oKSk7XG4gICAgfSBjYXRjaCAoaXRlcmF0b3JFcnJvcikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5cbi8qIVxuICogR2V0cyBhbGwgZW50cmllcyBmcm9tIGEgR2VuZXJhdG9yLiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgZ2VuZXJhdG9yIC0gd2hpY2ggY291bGQgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gKlxuICogQHBhcmFtIHtHZW5lcmF0b3J9IHRhcmdldFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEdlbmVyYXRvci5cbiAqL1xuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yRW50cmllcyhnZW5lcmF0b3IpIHtcbiAgdmFyIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gIHZhciBhY2N1bXVsYXRvciA9IFsgZ2VuZXJhdG9yUmVzdWx0LnZhbHVlIF07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbi8qIVxuICogR2V0cyBhbGwgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gYSB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlS2V5cyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlU3ltYm9scyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBrZXkgPSBhbGxLZXlzW2ldO1xuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KS5lbnVtZXJhYmxlKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5cbi8qIVxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBoYXZlIG1hdGNoaW5nIHZhbHVlcywgZ2l2ZW4gYSBzZXQgb2Yga2V5cy4gRGVmZXJzIHRvIGRlZXBFcXVhbCBmb3IgdGhlIGVxdWFsaXR5IGNoZWNrIG9mXG4gKiBlYWNoIGtleS4gSWYgYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkgaXMgbm90IGVxdWFsLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UgKGVhcmx5KS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7QXJyYXl9IGtleXMgQW4gYXJyYXkgb2Yga2V5cyB0byBjb21wYXJlIHRoZSB2YWx1ZXMgb2YgbGVmdEhhbmRPcGVyYW5kIGFuZCByaWdodEhhbmRPcGVyYW5kIGFnYWluc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qIVxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIGVxdWFsaXR5IG9mIHR3byBPYmplY3RzLiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGwgZGVmZXIgdG8gYGRlZXBFcXVhbGBcbiAqIGZvciBlYWNoIGVudW1lcmFibGUga2V5IGluIHRoZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5mdW5jdGlvbiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlZnRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIHZhciBsZWZ0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBsZWZ0SGFuZEtleXMgPSBsZWZ0SGFuZEtleXMuY29uY2F0KGxlZnRIYW5kU3ltYm9scyk7XG4gIHJpZ2h0SGFuZEtleXMgPSByaWdodEhhbmRLZXlzLmNvbmNhdChyaWdodEhhbmRTeW1ib2xzKTtcblxuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgbGVmdEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRFbnRyaWVzLmxlbmd0aCAmJiBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCkge1xuICAgIGxlZnRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmlnaHRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRFbnRyaWVzLCByaWdodEhhbmRFbnRyaWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoID09PSAwICYmXG4gICAgICBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSAwICYmXG4gICAgICByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgcmlnaHRIYW5kRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyohXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlLlxuICpcbiAqIFRoaXMgaW50ZW50aW9uYWxseSByZXR1cm5zIHRydWUgZm9yIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZSxcbiAqIGluY2x1ZGluZyBmdW5jdGlvbnMgYW5kIHN5bWJvbHMuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jztcbn1cblxuZnVuY3Rpb24gbWFwU3ltYm9scyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gbWFwU3ltYm9sKGVudHJ5KSB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG4iLCAidmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG4vKiFcbiAqIENoYWkgLSBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuaXNQcm94eUVuYWJsZWQoKVxuICpcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBDaGFpJ3MgcHJveHkgcHJvdGVjdGlvbiBmZWF0dXJlIGlzIGVuYWJsZWQuIElmXG4gKiBwcm94aWVzIGFyZSB1bnN1cHBvcnRlZCBvciBkaXNhYmxlZCB2aWEgdGhlIHVzZXIncyBDaGFpIGNvbmZpZywgdGhlbiByZXR1cm5cbiAqIGZhbHNlLiBPdGhlcndpc2UsIHJldHVybiB0cnVlLlxuICpcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGlzUHJveHlFbmFibGVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1Byb3h5RW5hYmxlZCgpIHtcbiAgcmV0dXJuIGNvbmZpZy51c2VQcm94eSAmJlxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGFkZFByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgaXNQcm94eUVuYWJsZWQgPSByZXF1aXJlKCcuL2lzUHJveHlFbmFibGVkJyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAuYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpXG4gKlxuICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBwcm90b3R5cGUgb2YgYW4gb2JqZWN0LlxuICpcbiAqICAgICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5pbnN0YW5jZW9mKEZvbyk7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5iZS5mb287XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBhZGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKCkge30gOiBnZXR0ZXI7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBwcm9wZXJ0eUdldHRlcmAgY2F1c2VzIHRoaXMgZnVuY3Rpb24gdG9cbiAgICAgICAgLy8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXMgZnJvbSB0aGVcbiAgICAgICAgLy8gc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmXG4gICAgICAgIC8vIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0IGFuZCBwcm94eSBwcm90ZWN0aW9uIGlzIGRpc2FibGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAgICAgLy8gb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBhc3NlcnRpb24sIG9yIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nIGludm9rZWRcbiAgICAgICAgLy8gZnJvbSBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWdcbiAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZFxuICAgICAgICAvLyBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgcHJveHkgcHJvdGVjdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuXG4gICAgICAgIC8vIHNldCBieSB0aGUgcHJveHkgZ2V0dGVyLlxuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgcHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH1cbiAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn07XG4iLCAidmFyIGZuTGVuZ3RoRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge30sICdsZW5ndGgnKTtcblxuLyohXG4gKiBDaGFpIC0gYWRkTGVuZ3RoR3VhcmQgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5hZGRMZW5ndGhHdWFyZChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpXG4gKlxuICogRGVmaW5lIGBsZW5ndGhgIGFzIGEgZ2V0dGVyIG9uIHRoZSBnaXZlbiB1bmludm9rZWQgbWV0aG9kIGFzc2VydGlvbi4gVGhlXG4gKiBnZXR0ZXIgYWN0cyBhcyBhIGd1YXJkIGFnYWluc3QgY2hhaW5pbmcgYGxlbmd0aGAgZGlyZWN0bHkgb2ZmIG9mIGFuIHVuaW52b2tlZFxuICogbWV0aG9kIGFzc2VydGlvbiwgd2hpY2ggaXMgYSBwcm9ibGVtIGJlY2F1c2UgaXQgcmVmZXJlbmNlcyBgZnVuY3Rpb25gJ3NcbiAqIGJ1aWx0LWluIGBsZW5ndGhgIHByb3BlcnR5IGluc3RlYWQgb2YgQ2hhaSdzIGBsZW5ndGhgIGFzc2VydGlvbi4gV2hlbiB0aGVcbiAqIGdldHRlciBjYXRjaGVzIHRoZSB1c2VyIG1ha2luZyB0aGlzIG1pc3Rha2UsIGl0IHRocm93cyBhbiBlcnJvciB3aXRoIGFcbiAqIGhlbHBmdWwgbWVzc2FnZS5cbiAqXG4gKiBUaGVyZSBhcmUgdHdvIHdheXMgaW4gd2hpY2ggdGhpcyBtaXN0YWtlIGNhbiBiZSBtYWRlLiBUaGUgZmlyc3Qgd2F5IGlzIGJ5XG4gKiBjaGFpbmluZyB0aGUgYGxlbmd0aGAgYXNzZXJ0aW9uIGRpcmVjdGx5IG9mZiBvZiBhbiB1bmludm9rZWQgY2hhaW5hYmxlXG4gKiBtZXRob2QuIEluIHRoaXMgY2FzZSwgQ2hhaSBzdWdnZXN0cyB0aGF0IHRoZSB1c2VyIHVzZSBgbGVuZ3RoT2ZgIGluc3RlYWQuIFRoZVxuICogc2Vjb25kIHdheSBpcyBieSBjaGFpbmluZyB0aGUgYGxlbmd0aGAgYXNzZXJ0aW9uIGRpcmVjdGx5IG9mZiBvZiBhbiB1bmludm9rZWRcbiAqIG5vbi1jaGFpbmFibGUgbWV0aG9kLiBOb24tY2hhaW5hYmxlIG1ldGhvZHMgbXVzdCBiZSBpbnZva2VkIHByaW9yIHRvXG4gKiBjaGFpbmluZy4gSW4gdGhpcyBjYXNlLCBDaGFpIHN1Z2dlc3RzIHRoYXQgdGhlIHVzZXIgY29uc3VsdCB0aGUgZG9jcyBmb3IgdGhlXG4gKiBnaXZlbiBhc3NlcnRpb24uXG4gKlxuICogSWYgdGhlIGBsZW5ndGhgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyB1bmNvbmZpZ3VyYWJsZSwgdGhlbiByZXR1cm4gYGZuYFxuICogd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogTm90ZSB0aGF0IGluIEVTNiwgdGhlIGZ1bmN0aW9uJ3MgYGxlbmd0aGAgcHJvcGVydHkgaXMgY29uZmlndXJhYmxlLCBzbyBvbmNlXG4gKiBzdXBwb3J0IGZvciBsZWdhY3kgZW52aXJvbm1lbnRzIGlzIGRyb3BwZWQsIENoYWkncyBgbGVuZ3RoYCBwcm9wZXJ0eSBjYW5cbiAqIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uJ3MgYGxlbmd0aGAgcHJvcGVydHksIGFuZCB0aGlzIGxlbmd0aCBndWFyZCB3aWxsXG4gKiBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LiBJbiB0aGUgbWVhbiB0aW1lLCBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgYWxsXG4gKiBlbnZpcm9ubWVudHMgaXMgdGhlIHByaW9yaXR5LlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge1N0cmluZ30gYXNzZXJ0aW9uTmFtZVxuICogQHBhcmFtIHtCb29sZWFufSBpc0NoYWluYWJsZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgYWRkTGVuZ3RoR3VhcmRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZExlbmd0aEd1YXJkIChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpIHtcbiAgaWYgKCFmbkxlbmd0aERlc2MuY29uZmlndXJhYmxlKSByZXR1cm4gZm47XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzQ2hhaW5hYmxlKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIER1ZScgK1xuICAgICAgICAgICcgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICtcbiAgICAgICAgICBhc3NlcnRpb25OYW1lICsgJ1wiLiBVc2UgXCInICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoT2ZcIiBpbnN0ZWFkLicpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUnICtcbiAgICAgICAgJyBkb2NzIGZvciBwcm9wZXIgdXNhZ2Ugb2YgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmbjtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0UHJvcGVydGllcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldFByb3BlcnRpZXMob2JqZWN0KVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LCBlbnVtZXJhYmxlIG9yIG5vdCxcbiAqIGluaGVyaXRlZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UHJvcGVydGllc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFByb3BlcnRpZXMob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG4gIGZ1bmN0aW9uIGFkZFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgd2hpbGUgKHByb3RvICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goYWRkUHJvcGVydHkpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgInZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgZ2V0UHJvcGVydGllcyA9IHJlcXVpcmUoJy4vZ2V0UHJvcGVydGllcycpO1xudmFyIGlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xuXG4vKiFcbiAqIENoYWkgLSBwcm94aWZ5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAucHJveGlmeShvYmplY3QpXG4gKlxuICogUmV0dXJuIGEgcHJveHkgb2YgZ2l2ZW4gb2JqZWN0IHRoYXQgdGhyb3dzIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnRcbiAqIHByb3BlcnR5IGlzIHJlYWQuIEJ5IGRlZmF1bHQsIHRoZSByb290IGNhdXNlIGlzIGFzc3VtZWQgdG8gYmUgYSBtaXNzcGVsbGVkXG4gKiBwcm9wZXJ0eSwgYW5kIHRodXMgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG9mZmVyIGEgcmVhc29uYWJsZSBzdWdnZXN0aW9uIGZyb21cbiAqIHRoZSBsaXN0IG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIEhvd2V2ZXIsIGlmIGEgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSBpc1xuICogcHJvdmlkZWQsIHRoZW4gdGhlIHJvb3QgY2F1c2UgaXMgaW5zdGVhZCBhIGZhaWx1cmUgdG8gaW52b2tlIGEgbm9uLWNoYWluYWJsZVxuICogbWV0aG9kIHByaW9yIHRvIHJlYWRpbmcgdGhlIG5vbi1leGlzdGVudCBwcm9wZXJ0eS5cbiAqXG4gKiBJZiBwcm94aWVzIGFyZSB1bnN1cHBvcnRlZCBvciBkaXNhYmxlZCB2aWEgdGhlIHVzZXIncyBDaGFpIGNvbmZpZywgdGhlblxuICogcmV0dXJuIG9iamVjdCB3aXRob3V0IG1vZGlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgcHJveGlmeVxuICovXG5cbnZhciBidWlsdGlucyA9IFsnX19mbGFncycsICdfX21ldGhvZHMnLCAnX29iaicsICdhc3NlcnQnXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcm94aWZ5KG9iaiwgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICBpZiAoIWlzUHJveHlFbmFibGVkKCkpIHJldHVybiBvYmo7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIHByb3h5R2V0dGVyKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgaGVyZSBiZWNhdXNlIHdlIHNob3VsZCBub3QgdGhyb3cgZXJyb3JzIG9uIFN5bWJvbCBwcm9wZXJ0aWVzXG4gICAgICAvLyBzdWNoIGFzIGBTeW1ib2wudG9TdHJpbmdUYWdgLlxuICAgICAgLy8gVGhlIHZhbHVlcyBmb3Igd2hpY2ggYW4gZXJyb3Igc2hvdWxkIGJlIHRocm93biBjYW4gYmUgY29uZmlndXJlZCB1c2luZ1xuICAgICAgLy8gdGhlIGBjb25maWcucHJveHlFeGNsdWRlZEtleXNgIHNldHRpbmcuXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiZcbiAgICAgICAgICAhUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBtZXNzYWdlIGZvciBpbnZhbGlkIHByb3BlcnR5IGFjY2VzcyBvZiBub24tY2hhaW5hYmxlIG1ldGhvZHMuXG4gICAgICAgIGlmIChub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnLicgK1xuICAgICAgICAgICAgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArXG4gICAgICAgICAgICBub25DaGFpbmFibGVNZXRob2ROYW1lICsgJ1wiLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIHJlYXNvbmFibHkgY2xvc2UgdG8gYW4gZXhpc3RpbmcgQ2hhaSBwcm9wZXJ0eSxcbiAgICAgICAgLy8gc3VnZ2VzdCB0aGF0IHByb3BlcnR5IHRvIHRoZSB1c2VyLiBPbmx5IHN1Z2dlc3QgcHJvcGVydGllcyB3aXRoIGFcbiAgICAgICAgLy8gZGlzdGFuY2UgbGVzcyB0aGFuIDQuXG4gICAgICAgIHZhciBzdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgICAgdmFyIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IDQ7XG4gICAgICAgIGdldFByb3BlcnRpZXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICAgICAgYnVpbHRpbnMuaW5kZXhPZihwcm9wKSA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gc3RyaW5nRGlzdGFuY2VDYXBwZWQoXG4gICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZGlzdCA8IHN1Z2dlc3Rpb25EaXN0YW5jZSkge1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uID0gcHJvcDtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlID0gZGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdWdnZXN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIHByb3BlcnR5ICtcbiAgICAgICAgICAgICcuIERpZCB5b3UgbWVhbiBcIicgKyBzdWdnZXN0aW9uICsgJ1wiPycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoaXMgcHJveHkgZ2V0dGVyIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uIEZvciBwcm9wZXJ0eVxuICAgICAgLy8gYXNzZXJ0aW9ucywgdGhpcyBwcmV2ZW50cyB0aGUgcHJveHkgZ2V0dGVyIGZyb20gc2hvd2luZyB1cCBpbiB0aGUgc3RhY2tcbiAgICAgIC8vIHRyYWNlIHNpbmNlIGl0J3MgaW52b2tlZCBiZWZvcmUgdGhlIHByb3BlcnR5IGdldHRlci4gRm9yIG1ldGhvZCBhbmRcbiAgICAgIC8vIGNoYWluYWJsZSBtZXRob2QgYXNzZXJ0aW9ucywgdGhpcyBmbGFnIHdpbGwgZW5kIHVwIGdldHRpbmcgY2hhbmdlZCB0b1xuICAgICAgLy8gdGhlIG1ldGhvZCB3cmFwcGVyLCB3aGljaCBpcyBnb29kIHNpbmNlIHRoaXMgZnJhbWUgd2lsbCBubyBsb25nZXIgYmUgaW5cbiAgICAgIC8vIHRoZSBzdGFjayBvbmNlIHRoZSBtZXRob2QgaXMgaW52b2tlZC4gTm90ZSB0aGF0IENoYWkgYnVpbHRpbiBhc3NlcnRpb25cbiAgICAgIC8vIHByb3BlcnRpZXMgc3VjaCBhcyBgX19mbGFnc2AgYXJlIHNraXBwZWQgc2luY2UgdGhpcyBpcyBvbmx5IG1lYW50IHRvXG4gICAgICAvLyBjYXB0dXJlIHRoZSBzdGFydGluZyBwb2ludCBvZiBhbiBhc3NlcnRpb24uIFRoaXMgc3RlcCBpcyBhbHNvIHNraXBwZWRcbiAgICAgIC8vIGlmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aHVzIGluZGljYXRpbmcgdGhhdCB0aGlzIGFzc2VydGlvbiBpc1xuICAgICAgLy8gYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGF0IGNhc2UsIHRoZSBgc3NmaWBcbiAgICAgIC8vIGZsYWcgaXMgYWxyZWFkeSBzZXQgdG8gdGhlIG91dGVyIGFzc2VydGlvbidzIHN0YXJ0aW5nIHBvaW50LlxuICAgICAgaWYgKGJ1aWx0aW5zLmluZGV4T2YocHJvcGVydHkpID09PSAtMSAmJiAhZmxhZyh0YXJnZXQsICdsb2NrU3NmaScpKSB7XG4gICAgICAgIGZsYWcodGFyZ2V0LCAnc3NmaScsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqICMgc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKVxuICogUmV0dXJuIHRoZSBMZXZlbnNodGVpbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzdHJpbmdzLCBidXQgbm8gbW9yZSB0aGFuIGNhcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJBXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyQlxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlclxuICogQHJldHVybiB7bnVtYmVyfSBtaW4oc3RyaW5nIGRpc3RhbmNlIGJldHdlZW4gc3RyQSBhbmQgc3RyQiwgY2FwKVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKSB7XG4gIGlmIChNYXRoLmFicyhzdHJBLmxlbmd0aCAtIHN0ckIubGVuZ3RoKSA+PSBjYXApIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG5cbiAgdmFyIG1lbW8gPSBbXTtcbiAgLy8gYG1lbW9gIGlzIGEgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgZGlzdGFuY2VzLlxuICAvLyBtZW1vW2ldW2pdIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHN0ckEuc2xpY2UoMCwgaSkgYW5kXG4gIC8vIHN0ckIuc2xpY2UoMCwgaikuXG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICBtZW1vW2ldID0gQXJyYXkoc3RyQi5sZW5ndGggKyAxKS5maWxsKDApO1xuICAgIG1lbW9baV1bMF0gPSBpO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgc3RyQi5sZW5ndGg7IGorKykge1xuICAgIG1lbW9bMF1bal0gPSBqO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc3RyQS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaCA9IHN0ckEuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gc3RyQi5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKE1hdGguYWJzKGkgLSBqKSA+PSBjYXApIHtcbiAgICAgICAgbWVtb1tpXVtqXSA9IGNhcDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZW1vW2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgIG1lbW9baSAtIDFdW2pdICsgMSxcbiAgICAgICAgbWVtb1tpXVtqIC0gMV0gKyAxLFxuICAgICAgICBtZW1vW2kgLSAxXVtqIC0gMV0gK1xuICAgICAgICAgIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVtb1tzdHJBLmxlbmd0aF1bc3RyQi5sZW5ndGhdO1xufVxuIiwgIi8qIVxuICogQ2hhaSAtIGFkZE1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5hZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpXG4gKlxuICogQWRkcyBhIG1ldGhvZCB0byB0aGUgcHJvdG90eXBlIG9mIGFuIG9iamVjdC5cbiAqXG4gKiAgICAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2ZvbycsIGZ1bmN0aW9uIChzdHIpIHtcbiAqICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmopLnRvLmJlLmVxdWFsKHN0cik7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvbygnYmFyJyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIG1ldGhvZCBpcyBhZGRlZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIGFkZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGFkZE1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgbWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgbWV0aG9kV3JhcHBlcmAgY2F1c2VzIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlXG4gICAgLy8gc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZlxuICAgIC8vIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWYgdGhlXG4gICAgLy8gYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIGVpdGhlciB0aGlzIGFzc2VydGlvbiBoYXMgYmVlblxuICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb21cbiAgICAvLyBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzXG4gICAgLy8gYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZVxuICAgIC8vIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgaWYgKCFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICBmbGFnKHRoaXMsICdzc2ZpJywgbWV0aG9kV3JhcHBlcik7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH07XG5cbiAgYWRkTGVuZ3RoR3VhcmQobWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG1ldGhvZFdyYXBwZXIsIG5hbWUpO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVQcm9wZXJ0eSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIGlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLm92ZXJ3cml0ZVByb3BlcnR5KGN0eCwgbmFtZSwgZm4pXG4gKlxuICogT3ZlcndyaXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIHByb3BlcnR5IGdldHRlciBhbmQgcHJvdmlkZXNcbiAqIGFjY2VzcyB0byBwcmV2aW91cyB2YWx1ZS4gTXVzdCByZXR1cm4gZnVuY3Rpb24gdG8gdXNlIGFzIGdldHRlci5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlUHJvcGVydHkoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnb2snLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICogICAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb28pIHtcbiAqICAgICAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqLm5hbWUpLnRvLmVxdWFsKCdiYXInKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmJlLm9rO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBnZXR0ZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgb3ZlcndyaXRlUHJvcGVydHlcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICB2YXIgX2dldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBuYW1lKVxuICAgICwgX3N1cGVyID0gZnVuY3Rpb24gKCkge307XG5cbiAgaWYgKF9nZXQgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9nZXQuZ2V0KVxuICAgIF9zdXBlciA9IF9nZXQuZ2V0XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXJgIGNhdXNlcyB0aGlzXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb24gZnJhbWVzXG4gICAgICAgIC8vIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZlxuICAgICAgICAvLyB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldCBhbmQgcHJveHkgcHJvdGVjdGlvbiBpcyBkaXNhYmxlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gZWl0aGVyIHRoaXMgYXNzZXJ0aW9uIGhhcyBiZWVuXG4gICAgICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkXG4gICAgICAgIC8vIGZyb20gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnXG4gICAgICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uIEluIHRoZSBzZWNvbmRcbiAgICAgICAgLy8gY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHByb3h5IHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgdGhlbiB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlblxuICAgICAgICAvLyBzZXQgYnkgdGhlIHByb3h5IGdldHRlci5cbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dGluZyB0aGUgYGxvY2tTc2ZpYCBmbGFnIHRvIGB0cnVlYCBwcmV2ZW50cyB0aGUgb3ZlcndyaXR0ZW5cbiAgICAgICAgLy8gYXNzZXJ0aW9uIGZyb20gY2hhbmdpbmcgdGhlIGBzc2ZpYCBmbGFnLiBCeSB0aGlzIHBvaW50LCB0aGUgYHNzZmlgXG4gICAgICAgIC8vIGZsYWcgaXMgYWxyZWFkeSBzZXQgdG8gdGhlIGNvcnJlY3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYXNzZXJ0aW9uLlxuICAgICAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCAnbG9ja1NzZmknKTtcbiAgICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCB0cnVlKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgb3JpZ0xvY2tTc2ZpKTtcblxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9XG4gICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5vdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBmbilcbiAqXG4gKiBPdmVyd3JpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgbWV0aG9kIGFuZCBwcm92aWRlc1xuICogYWNjZXNzIHRvIHByZXZpb3VzIGZ1bmN0aW9uLiBNdXN0IHJldHVybiBmdW5jdGlvblxuICogdG8gYmUgdXNlZCBmb3IgbmFtZS5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2VxdWFsJywgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIpIHtcbiAqICAgICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRm9vKSB7XG4gKiAgICAgICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iai52YWx1ZSkudG8uZXF1YWwoc3RyKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kKCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmVxdWFsKCdiYXInKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB3aG9zZSBtZXRob2QgaXMgdG8gYmUgb3ZlcndyaXR0ZW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIG1ldGhvZCB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBvdmVyd3JpdGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIF9tZXRob2QgPSBjdHhbbmFtZV1cbiAgICAsIF9zdXBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH07XG5cbiAgaWYgKF9tZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9tZXRob2QpXG4gICAgX3N1cGVyID0gX21ldGhvZDtcblxuICB2YXIgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXJgIGNhdXNlcyB0aGlzXG4gICAgLy8gZnVuY3Rpb24gdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXMgZnJvbVxuICAgIC8vIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmIHRoZVxuICAgIC8vIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAvLyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGFzc2VydGlvbiwgb3IgdGhpcyBhc3NlcnRpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tXG4gICAgLy8gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhc1xuICAgIC8vIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGVcbiAgICAvLyBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgIGlmICghZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcik7XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyB0aGUgYGxvY2tTc2ZpYCBmbGFnIHRvIGB0cnVlYCBwcmV2ZW50cyB0aGUgb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uXG4gICAgLy8gZnJvbSBjaGFuZ2luZyB0aGUgYHNzZmlgIGZsYWcuIEJ5IHRoaXMgcG9pbnQsIHRoZSBgc3NmaWAgZmxhZyBpcyBhbHJlYWR5XG4gICAgLy8gc2V0IHRvIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFzc2VydGlvbi5cbiAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCAnbG9ja1NzZmknKTtcbiAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHRydWUpO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX3N1cGVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgb3JpZ0xvY2tTc2ZpKTtcblxuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH1cblxuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qIVxuICogTW9kdWxlIHZhcmlhYmxlc1xuICovXG5cbi8vIENoZWNrIHdoZXRoZXIgYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgaXMgc3VwcG9ydGVkXG52YXIgY2FuU2V0UHJvdG90eXBlID0gdHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gV2l0aG91dCBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBzdXBwb3J0LCB0aGlzIG1vZHVsZSB3aWxsIG5lZWQgdG8gYWRkIHByb3BlcnRpZXMgdG8gYSBmdW5jdGlvbi5cbi8vIEhvd2V2ZXIsIHNvbWUgb2YgZnVuY3Rpb25zJyBvd24gcHJvcHMgYXJlIG5vdCBjb25maWd1cmFibGUgYW5kIHNob3VsZCBiZSBza2lwcGVkLlxudmFyIHRlc3RGbiA9IGZ1bmN0aW9uKCkge307XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG5cbiAgLy8gTm90ZTogUGhhbnRvbUpTIDEueCBpbmNsdWRlcyBgY2FsbGVlYCBhcyBvbmUgb2YgYHRlc3RGbmAncyBvd24gcHJvcGVydGllcyxcbiAgLy8gYnV0IHRoZW4gcmV0dXJucyBgdW5kZWZpbmVkYCBhcyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgYGNhbGxlZWAuIEFzIGFcbiAgLy8gd29ya2Fyb3VuZCwgd2UgcGVyZm9ybSBhbiBvdGhlcndpc2UgdW5uZWNlc3NhcnkgdHlwZS1jaGVjayBmb3IgYHByb3BEZXNjYCxcbiAgLy8gYW5kIHRoZW4gZmlsdGVyIGl0IG91dCBpZiBpdCdzIG5vdCBhbiBvYmplY3QgYXMgaXQgc2hvdWxkIGJlLlxuICBpZiAodHlwZW9mIHByb3BEZXNjICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gIXByb3BEZXNjLmNvbmZpZ3VyYWJsZTtcbn0pO1xuXG4vLyBDYWNoZSBgRnVuY3Rpb25gIHByb3BlcnRpZXNcbnZhciBjYWxsICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLFxuICAgIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vKipcbiAqICMjIyAuYWRkQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKVxuICpcbiAqIEFkZHMgYSBtZXRob2QgdG8gYW4gb2JqZWN0LCBzdWNoIHRoYXQgdGhlIG1ldGhvZCBjYW4gYWxzbyBiZSBjaGFpbmVkLlxuICpcbiAqICAgICB1dGlscy5hZGRDaGFpbmFibGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZm9vJywgZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaikudG8uYmUuZXF1YWwoc3RyKTtcbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnZm9vJywgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICpcbiAqIFRoZSByZXN1bHQgY2FuIHRoZW4gYmUgdXNlZCBhcyBib3RoIGEgbWV0aG9kIGFzc2VydGlvbiwgZXhlY3V0aW5nIGJvdGggYG1ldGhvZGAgYW5kXG4gKiBgY2hhaW5pbmdCZWhhdmlvcmAsIG9yIGFzIGEgbGFuZ3VhZ2UgY2hhaW4sIHdoaWNoIG9ubHkgZXhlY3V0ZXMgYGNoYWluaW5nQmVoYXZpb3JgLlxuICpcbiAqICAgICBleHBlY3QoZm9vU3RyKS50by5iZS5mb28oJ2JhcicpO1xuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvby5lcXVhbCgnZm9vJyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIG1ldGhvZCBpcyBhZGRlZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIGFkZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIGBuYW1lYCwgd2hlbiBjYWxsZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoYWluaW5nQmVoYXZpb3IgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRDaGFpbmFibGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hhaW5pbmdCZWhhdmlvciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IHtcbiAgICAgIG1ldGhvZDogbWV0aG9kXG4gICAgLCBjaGFpbmluZ0JlaGF2aW9yOiBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG5cbiAgLy8gc2F2ZSB0aGUgbWV0aG9kcyBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZW0gbGF0ZXIsIGlmIHdlIG5lZWQgdG8uXG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yLmNhbGwodGhpcyk7XG5cbiAgICAgICAgdmFyIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYGNoYWluYWJsZU1ldGhvZFdyYXBwZXJgIGNhdXNlcyB0aGlzXG4gICAgICAgICAgLy8gZnVuY3Rpb24gdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIC8vIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmXG4gICAgICAgICAgLy8gdGhlIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiB0aGlzIGFzc2VydGlvbiBpcyBiZWluZ1xuICAgICAgICAgIC8vIGludm9rZWQgZnJvbSBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoaXMgY2FzZSwgdGhlIGBzc2ZpYFxuICAgICAgICAgIC8vIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE5vdGUgdGhhdCBvdmVyd3JpdGluZyBhIGNoYWluYWJsZSBtZXRob2QgbWVyZWx5IHJlcGxhY2VzIHRoZSBzYXZlZFxuICAgICAgICAgIC8vIG1ldGhvZHMgaW4gYGN0eC5fX21ldGhvZHNgIGluc3RlYWQgb2YgY29tcGxldGVseSByZXBsYWNpbmcgdGhlXG4gICAgICAgICAgLy8gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uLiBUaGVyZWZvcmUsIGFuIG92ZXJ3cml0aW5nIGFzc2VydGlvbiB3b24ndFxuICAgICAgICAgIC8vIHNldCB0aGUgYHNzZmlgIG9yIGBsb2NrU3NmaWAgZmxhZ3MuXG4gICAgICAgICAgaWYgKCFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGVuZ3RoR3VhcmQoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgbmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gVXNlIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAoY2FuU2V0UHJvdG90eXBlKSB7XG4gICAgICAgICAgLy8gSW5oZXJpdCBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3QgYnkgcmVwbGFjaW5nIHRoZSBgRnVuY3Rpb25gIHByb3RvdHlwZVxuICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGBjYWxsYCBhbmQgYGFwcGx5YCBtZXRob2RzIGZyb20gYEZ1bmN0aW9uYFxuICAgICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgICBwcm90b3R5cGUuYXBwbHkgPSBhcHBseTtcbiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgcHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIHJlZGVmaW5lIGFsbCBwcm9wZXJ0aWVzIChzbG93ISlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZU5hbWVzLmluZGV4T2YoYXNzZXJ0ZXJOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgYXNzZXJ0ZXJOYW1lKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBwcm94aWZ5KGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgfVxuICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcilcbiAqXG4gKiBPdmVyd3JpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgY2hhaW5hYmxlIG1ldGhvZFxuICogYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcHJldmlvdXMgZnVuY3Rpb24gb3JcbiAqIHByb3BlcnR5LiAgTXVzdCByZXR1cm4gZnVuY3Rpb25zIHRvIGJlIHVzZWQgZm9yXG4gKiBuYW1lLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnbGVuZ3RoT2YnLFxuICogICAgICAgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgfVxuICogICAgICwgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgfVxuICogICAgICk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2ZvbycsIGZuLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5oYXZlLmxlbmd0aE9mLmFib3ZlKDMpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIG1ldGhvZCAvIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgLyBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFpbmluZ0JlaGF2aW9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHByb3BlcnR5XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcblxuICB2YXIgX2NoYWluaW5nQmVoYXZpb3IgPSBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yO1xuICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yID0gZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNoYWluaW5nQmVoYXZpb3IoX2NoYWluaW5nQmVoYXZpb3IpLmNhbGwodGhpcyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfTtcblxuICB2YXIgX21ldGhvZCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZDtcbiAgY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kID0gZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX21ldGhvZCkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9O1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBjb21wYXJlQnlJbnNwZWN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpO1xuXG4vKipcbiAqICMjIyAuY29tcGFyZUJ5SW5zcGVjdChtaXhlZCwgbWl4ZWQpXG4gKlxuICogVG8gYmUgdXNlZCBhcyBhIGNvbXBhcmVGdW5jdGlvbiB3aXRoIEFycmF5LnByb3RvdHlwZS5zb3J0LiBDb21wYXJlcyBlbGVtZW50c1xuICogdXNpbmcgaW5zcGVjdCBpbnN0ZWFkIG9mIGRlZmF1bHQgYmVoYXZpb3Igb2YgdXNpbmcgdG9TdHJpbmcgc28gdGhhdCBTeW1ib2xzXG4gKiBhbmQgb2JqZWN0cyB3aXRoIGlycmVndWxhci9taXNzaW5nIHRvU3RyaW5nIGNhbiBzdGlsbCBiZSBzb3J0ZWQgd2l0aG91dCBhXG4gKiBUeXBlRXJyb3IuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gZmlyc3QgZWxlbWVudCB0byBjb21wYXJlXG4gKiBAcGFyYW0ge01peGVkfSBzZWNvbmQgZWxlbWVudCB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSAtMSBpZiAnYScgc2hvdWxkIGNvbWUgYmVmb3JlICdiJzsgb3RoZXJ3aXNlIDFcbiAqIEBuYW1lIGNvbXBhcmVCeUluc3BlY3RcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21wYXJlQnlJbnNwZWN0KGEsIGIpIHtcbiAgcmV0dXJuIGluc3BlY3QoYSkgPCBpbnNwZWN0KGIpID8gLTEgOiAxO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBkaXJlY3RseS1vd25lZCBlbnVtZXJhYmxlIHByb3BlcnR5IHN5bWJvbHMgb2YgYW5cbiAqIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG4gKiByZXR1cm5zIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopIHtcbiAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKS5lbnVtZXJhYmxlO1xuICB9KTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzID0gcmVxdWlyZSgnLi9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzJyk7XG5cbi8qKlxuICogIyMjIC5nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBkaXJlY3RseS1vd25lZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBhbiBvYmplY3QuIFRoaXMgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgT2JqZWN0LmtleXMgb25seVxuICogcmV0dXJucyBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzLCBub3QgZW51bWVyYWJsZSBwcm9wZXJ0eSBzeW1ib2xzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmNvbmNhdChnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBjaGVja0Vycm9yIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgZ2V0RnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnZ2V0LWZ1bmMtbmFtZScpO1xuLyoqXG4gKiAjIyMgLmNoZWNrRXJyb3JcbiAqXG4gKiBDaGVja3MgdGhhdCBhbiBlcnJvciBjb25mb3JtcyB0byBhIGdpdmVuIHNldCBvZiBjcml0ZXJpYSBhbmQvb3IgcmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IGl0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLyoqXG4gKiAjIyMgLmNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSlcbiAqXG4gKiBDaGVja3MgaWYgdHdvIGluc3RhbmNlcyBhcmUgY29tcGF0aWJsZSAoc3RyaWN0IGVxdWFsKS5cbiAqIFJldHVybnMgZmFsc2UgaWYgZXJyb3JMaWtlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBFcnJvciwgYmVjYXVzZSBpbnN0YW5jZXNcbiAqIGNhbiBvbmx5IGJlIGNvbXBhdGlibGUgaWYgdGhleSdyZSBib3RoIGVycm9yIGluc3RhbmNlcy5cbiAqXG4gKiBAbmFtZSBjb21wYXRpYmxlSW5zdGFuY2VcbiAqIEBwYXJhbSB7RXJyb3J9IHRocm93biBlcnJvclxuICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2Ugb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuXG4vKipcbiAqICMjIyAuY29tcGF0aWJsZUNvbnN0cnVjdG9yKHRocm93biwgZXJyb3JMaWtlKVxuICpcbiAqIENoZWNrcyBpZiB0d28gY29uc3RydWN0b3JzIGFyZSBjb21wYXRpYmxlLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gcmVjZWl2ZSBlaXRoZXIgYW4gZXJyb3IgY29uc3RydWN0b3Igb3JcbiAqIGFuIGVycm9yIGluc3RhbmNlIGFzIHRoZSBgZXJyb3JMaWtlYCBhcmd1bWVudC5cbiAqIENvbnN0cnVjdG9ycyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5J3JlIHRoZSBzYW1lIG9yIGlmIG9uZSBpc1xuICogYW4gaW5zdGFuY2Ugb2YgYW5vdGhlci5cbiAqXG4gKiBAbmFtZSBjb21wYXRpYmxlQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXJyb3J9IHRocm93biBlcnJvclxuICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2Ugb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgLy8gSWYgYGVycm9yTGlrZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW55IGVycm9yIHdlIGNvbXBhcmUgdGhlaXIgY29uc3RydWN0b3JzXG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmIChlcnJvckxpa2UucHJvdG90eXBlIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyb3JMaWtlID09PSBFcnJvcikge1xuICAgIC8vIElmIGBlcnJvckxpa2VgIGlzIGEgY29uc3RydWN0b3IgdGhhdCBpbmhlcml0cyBmcm9tIEVycm9yLCB3ZSBjb21wYXJlIGB0aHJvd25gIHRvIGBlcnJvckxpa2VgIGRpcmVjdGx5XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiAjIyMgLmNvbXBhdGlibGVNZXNzYWdlKHRocm93biwgZXJyTWF0Y2hlcilcbiAqXG4gKiBDaGVja3MgaWYgYW4gZXJyb3IncyBtZXNzYWdlIGlzIGNvbXBhdGlibGUgd2l0aCBhIG1hdGNoZXIgKFN0cmluZyBvciBSZWdFeHApLlxuICogSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIFN0cmluZyBvciBwYXNzZXMgdGhlIFJlZ0V4cCB0ZXN0LFxuICogaXQgaXMgY29uc2lkZXJlZCBjb21wYXRpYmxlLlxuICpcbiAqIEBuYW1lIGNvbXBhdGlibGVNZXNzYWdlXG4gKiBAcGFyYW0ge0Vycm9yfSB0aHJvd24gZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gZXJyTWF0Y2hlciB0byBsb29rIGZvciBpbnRvIHRoZSBtZXNzYWdlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvbXBhdGlibGVNZXNzYWdlKHRocm93biwgZXJyTWF0Y2hlcikge1xuICB2YXIgY29tcGFyaXNvblN0cmluZyA9IHR5cGVvZiB0aHJvd24gPT09ICdzdHJpbmcnID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChlcnJNYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIGVyck1hdGNoZXIudGVzdChjb21wYXJpc29uU3RyaW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyTWF0Y2hlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogIyMjIC5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKVxuICpcbiAqIEdldHMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgZm9yIGFuIEVycm9yIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yIGl0c2VsZi5cbiAqXG4gKiBAbmFtZSBnZXRDb25zdHJ1Y3Rvck5hbWVcbiAqIEBwYXJhbSB7RXJyb3J8RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpIHtcbiAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZTtcbiAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZ2V0RnVuY3Rpb25OYW1lKGVycm9yTGlrZS5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGBlcnJgIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBFcnJvciBpdCBpcyBhbiBlcnJvciBjb25zdHJ1Y3RvciBpdHNlbGYgb3IgYW5vdGhlciBmdW5jdGlvbi5cbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBjb21tb24gZnVuY3Rpb24gd2UgZ2V0IGl0cyBuYW1lLCBvdGhlcndpc2Ugd2UgbWF5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlXG4gICAgLy8gb2YgdGhlIGVycm9yIGp1c3QgaW4gY2FzZSBpdCdzIGEgcG9vcmx5LWNvbnN0cnVjdGVkIGVycm9yLiBQbGVhc2Ugc2VlIGNoYWlqcy9jaGFpL2lzc3Vlcy80NSB0byBrbm93IG1vcmUuXG4gICAgY29uc3RydWN0b3JOYW1lID0gZ2V0RnVuY3Rpb25OYW1lKGVycm9yTGlrZSk7XG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gJycpIHtcbiAgICAgIHZhciBuZXdDb25zdHJ1Y3Rvck5hbWUgPSBnZXRGdW5jdGlvbk5hbWUobmV3IGVycm9yTGlrZSgpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBuZXdDb25zdHJ1Y3Rvck5hbWUgfHwgY29uc3RydWN0b3JOYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG59XG5cbi8qKlxuICogIyMjIC5nZXRNZXNzYWdlKGVycm9yTGlrZSlcbiAqXG4gKiBHZXRzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gYW4gZXJyb3IuXG4gKiBJZiBgZXJyYCBpcyBhIFN0cmluZyBpdHNlbGYsIHdlIHJldHVybiBpdC5cbiAqIElmIHRoZSBlcnJvciBoYXMgbm8gbWVzc2FnZSwgd2UgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBAbmFtZSBnZXRNZXNzYWdlXG4gKiBAcGFyYW0ge0Vycm9yfFN0cmluZ30gZXJyb3JMaWtlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2UoZXJyb3JMaWtlKSB7XG4gIHZhciBtc2cgPSAnJztcbiAgaWYgKGVycm9yTGlrZSAmJiBlcnJvckxpa2UubWVzc2FnZSkge1xuICAgIG1zZyA9IGVycm9yTGlrZS5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09ICdzdHJpbmcnKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG5cbiAgcmV0dXJuIG1zZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBhdGlibGVJbnN0YW5jZTogY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlQ29uc3RydWN0b3I6IGNvbXBhdGlibGVDb25zdHJ1Y3RvcixcbiAgY29tcGF0aWJsZU1lc3NhZ2U6IGNvbXBhdGlibGVNZXNzYWdlLFxuICBnZXRNZXNzYWdlOiBnZXRNZXNzYWdlLFxuICBnZXRDb25zdHJ1Y3Rvck5hbWU6IGdldENvbnN0cnVjdG9yTmFtZSxcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gaXNOYU4gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNSBTYWt0aGlwcml5YW4gVmFpcmFtYW5pIDx0aGVjaGFyZ2luZ3ZvbGNhbm9AZ21haWwuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmlzTmFOKHZhbHVlKVxuICpcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgTmFOIG9yIG5vdC5cbiAqXG4gKiAgICAgdXRpbHMuaXNOYU4oTmFOKTsgLy8gdHJ1ZVxuICpcbiAqIEBwYXJhbSB7VmFsdWV9IFRoZSB2YWx1ZSB3aGljaCBoYXMgdG8gYmUgY2hlY2tlZCBpZiBpdCBpcyBOYU5cbiAqIEBuYW1lIGlzTmFOXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBSZWZlciBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNuYW4tbnVtYmVyXG4gIC8vIHNlY3Rpb24ncyBOT1RFLlxuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG4vLyBJZiBFQ01BU2NyaXB0IDYncyBOdW1iZXIuaXNOYU4gaXMgcHJlc2VudCwgcHJlZmVyIHRoYXQuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc05hTiB8fCBpc05hTjtcbiIsICJ2YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZShvYmopIHtcbiAgdmFyIG9iamVjdFR5cGUgPSB0eXBlKG9iaik7XG4gIHZhciBvYmplY3RUeXBlcyA9IFsnQXJyYXknLCAnT2JqZWN0JywgJ2Z1bmN0aW9uJ107XG5cbiAgcmV0dXJuIG9iamVjdFR5cGVzLmluZGV4T2Yob2JqZWN0VHlwZSkgIT09IC0xO1xufVxuXG4vKipcbiAqICMjIyAuZ2V0T3BlcmF0b3IobWVzc2FnZSlcbiAqXG4gKiBFeHRyYWN0IHRoZSBvcGVyYXRvciBmcm9tIGVycm9yIG1lc3NhZ2UuXG4gKiBPcGVyYXRvciBkZWZpbmVkIGlzIGJhc2VkIG9uIGJlbG93IGxpbmtcbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvYXNzZXJ0Lmh0bWwjYXNzZXJ0X2Fzc2VydC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBgb3BlcmF0b3JgIG9yIGB1bmRlZmluZWRgIHZhbHVlIGZvciBhbiBBc3NlcnRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uKVxuICogQHBhcmFtIHtBcmd1bWVudHN9IGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgYXJndW1lbnRzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRPcGVyYXRvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICB2YXIgb3BlcmF0b3IgPSBmbGFnKG9iaiwgJ29wZXJhdG9yJyk7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgJ25lZ2F0ZScpO1xuICB2YXIgZXhwZWN0ZWQgPSBhcmdzWzNdO1xuICB2YXIgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV07XG5cbiAgaWYgKG9wZXJhdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIG1zZyA9IG1zZygpO1xuXG4gIG1zZyA9IG1zZyB8fCAnJztcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKC9cXHNoYXZlXFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIGlzT2JqZWN0ID0gaXNPYmplY3RUeXBlKGV4cGVjdGVkKTtcbiAgaWYgKC9cXHNub3RcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiBpc09iamVjdCA/ICdub3REZWVwU3RyaWN0RXF1YWwnIDogJ25vdFN0cmljdEVxdWFsJztcbiAgfVxuXG4gIHJldHVybiBpc09iamVjdCA/ICdkZWVwU3RyaWN0RXF1YWwnIDogJ3N0cmljdEVxdWFsJztcbn07XG4iLCAiLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogRGVwZW5kZW5jaWVzIHRoYXQgYXJlIHVzZWQgZm9yIG11bHRpcGxlIGV4cG9ydHMgYXJlIHJlcXVpcmVkIGhlcmUgb25seSBvbmNlXG4gKi9cblxudmFyIHBhdGh2YWwgPSByZXF1aXJlKCdwYXRodmFsJyk7XG5cbi8qIVxuICogdGVzdCB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy50ZXN0ID0gcmVxdWlyZSgnLi90ZXN0Jyk7XG5cbi8qIVxuICogdHlwZSB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy50eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcblxuLyohXG4gKiBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKi9cbmV4cG9ydHMuZXhwZWN0VHlwZXMgPSByZXF1aXJlKCcuL2V4cGVjdFR5cGVzJyk7XG5cbi8qIVxuICogbWVzc2FnZSB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5nZXRNZXNzYWdlID0gcmVxdWlyZSgnLi9nZXRNZXNzYWdlJyk7XG5cbi8qIVxuICogYWN0dWFsIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmdldEFjdHVhbCA9IHJlcXVpcmUoJy4vZ2V0QWN0dWFsJyk7XG5cbi8qIVxuICogSW5zcGVjdCB1dGlsXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0ID0gcmVxdWlyZSgnLi9pbnNwZWN0Jyk7XG5cbi8qIVxuICogT2JqZWN0IERpc3BsYXkgdXRpbFxuICovXG5cbmV4cG9ydHMub2JqRGlzcGxheSA9IHJlcXVpcmUoJy4vb2JqRGlzcGxheScpO1xuXG4vKiFcbiAqIEZsYWcgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG4vKiFcbiAqIEZsYWcgdHJhbnNmZXJyaW5nIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyohXG4gKiBEZWVwIGVxdWFsIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmVxbCA9IHJlcXVpcmUoJ2RlZXAtZXFsJyk7XG5cbi8qIVxuICogRGVlcCBwYXRoIGluZm9cbiAqL1xuXG5leHBvcnRzLmdldFBhdGhJbmZvID0gcGF0aHZhbC5nZXRQYXRoSW5mbztcblxuLyohXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IGV4aXN0c1xuICovXG5cbmV4cG9ydHMuaGFzUHJvcGVydHkgPSBwYXRodmFsLmhhc1Byb3BlcnR5O1xuXG4vKiFcbiAqIEZ1bmN0aW9uIG5hbWVcbiAqL1xuXG5leHBvcnRzLmdldE5hbWUgPSByZXF1aXJlKCdnZXQtZnVuYy1uYW1lJyk7XG5cbi8qIVxuICogYWRkIFByb3BlcnR5XG4gKi9cblxuZXhwb3J0cy5hZGRQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vYWRkUHJvcGVydHknKTtcblxuLyohXG4gKiBhZGQgTWV0aG9kXG4gKi9cblxuZXhwb3J0cy5hZGRNZXRob2QgPSByZXF1aXJlKCcuL2FkZE1ldGhvZCcpO1xuXG4vKiFcbiAqIG92ZXJ3cml0ZSBQcm9wZXJ0eVxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL292ZXJ3cml0ZVByb3BlcnR5Jyk7XG5cbi8qIVxuICogb3ZlcndyaXRlIE1ldGhvZFxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlTWV0aG9kID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVNZXRob2QnKTtcblxuLyohXG4gKiBBZGQgYSBjaGFpbmFibGUgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5hZGRDaGFpbmFibGVNZXRob2QgPSByZXF1aXJlKCcuL2FkZENoYWluYWJsZU1ldGhvZCcpO1xuXG4vKiFcbiAqIE92ZXJ3cml0ZSBjaGFpbmFibGUgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSByZXF1aXJlKCcuL292ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCcpO1xuXG4vKiFcbiAqIENvbXBhcmUgYnkgaW5zcGVjdCBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmNvbXBhcmVCeUluc3BlY3QgPSByZXF1aXJlKCcuL2NvbXBhcmVCeUluc3BlY3QnKTtcblxuLyohXG4gKiBHZXQgb3duIGVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scyBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMgPSByZXF1aXJlKCcuL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMnKTtcblxuLyohXG4gKiBHZXQgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcycpO1xuXG4vKiFcbiAqIENoZWNrcyBlcnJvciBhZ2FpbnN0IGEgZ2l2ZW4gc2V0IG9mIGNyaXRlcmlhXG4gKi9cblxuZXhwb3J0cy5jaGVja0Vycm9yID0gcmVxdWlyZSgnY2hlY2stZXJyb3InKTtcblxuLyohXG4gKiBQcm94aWZ5IHV0aWxcbiAqL1xuXG5leHBvcnRzLnByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcblxuLyohXG4gKiBhZGRMZW5ndGhHdWFyZCB1dGlsXG4gKi9cblxuZXhwb3J0cy5hZGRMZW5ndGhHdWFyZCA9IHJlcXVpcmUoJy4vYWRkTGVuZ3RoR3VhcmQnKTtcblxuLyohXG4gKiBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqL1xuXG5leHBvcnRzLmlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xuXG4vKiFcbiAqIGlzTmFOIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuaXNOYU4gPSByZXF1aXJlKCcuL2lzTmFOJyk7XG5cbi8qIVxuICogZ2V0T3BlcmF0b3IgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5nZXRPcGVyYXRvciA9IHJlcXVpcmUoJy4vZ2V0T3BlcmF0b3InKTsiLCAiLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjb25maWcgPSByZXF1aXJlKCcuL2NvbmZpZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChfY2hhaSwgdXRpbCkge1xuICAvKiFcbiAgICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAgICovXG5cbiAgdmFyIEFzc2VydGlvbkVycm9yID0gX2NoYWkuQXNzZXJ0aW9uRXJyb3JcbiAgICAsIGZsYWcgPSB1dGlsLmZsYWc7XG5cbiAgLyohXG4gICAqIE1vZHVsZSBleHBvcnQuXG4gICAqL1xuXG4gIF9jaGFpLkFzc2VydGlvbiA9IEFzc2VydGlvbjtcblxuICAvKiFcbiAgICogQXNzZXJ0aW9uIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIENyZWF0ZXMgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICpcbiAgICogYEFzc2VydGlvbmAgb2JqZWN0cyBjb250YWluIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGZsYWdzLiBUaHJlZSBmbGFncyBjYW5cbiAgICogYmUgYXNzaWduZWQgZHVyaW5nIGluc3RhbnRpYXRpb24gYnkgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhpcyBjb25zdHJ1Y3RvcjpcbiAgICpcbiAgICogLSBgb2JqZWN0YDogVGhpcyBmbGFnIGNvbnRhaW5zIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRm9yIGV4YW1wbGUsIGluXG4gICAqICAgdGhlIGFzc2VydGlvbiBgZXhwZWN0KG51bUtpdHRlbnMpLnRvLmVxdWFsKDcpO2AsIHRoZSBgb2JqZWN0YCBmbGFnIHdpbGxcbiAgICogICBjb250YWluIGBudW1LaXR0ZW5zYCBzbyB0aGF0IHRoZSBgZXF1YWxgIGFzc2VydGlvbiBjYW4gcmVmZXJlbmNlIGl0IHdoZW5cbiAgICogICBuZWVkZWQuXG4gICAqXG4gICAqIC0gYG1lc3NhZ2VgOiBUaGlzIGZsYWcgY29udGFpbnMgYW4gb3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gYmVcbiAgICogICBwcmVwZW5kZWQgdG8gdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCdzIGdlbmVyYXRlZCBieSB0aGUgYXNzZXJ0aW9uIHdoZW4gaXRcbiAgICogICBmYWlscy5cbiAgICpcbiAgICogLSBgc3NmaWA6IFRoaXMgZmxhZyBzdGFuZHMgZm9yIFwic3RhcnQgc3RhY2sgZnVuY3Rpb24gaW5kaWNhdG9yXCIuIEl0XG4gICAqICAgY29udGFpbnMgYSBmdW5jdGlvbiByZWZlcmVuY2UgdGhhdCBzZXJ2ZXMgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvclxuICAgKiAgIHJlbW92aW5nIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IgdGhhdCdzIGNyZWF0ZWQgYnkgdGhlXG4gICAqICAgYXNzZXJ0aW9uIHdoZW4gaXQgZmFpbHMuIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgYSBjbGVhbmVyIHN0YWNrIHRyYWNlIHRvXG4gICAqICAgZW5kIHVzZXJzIGJ5IHJlbW92aW5nIENoYWkncyBpbnRlcm5hbCBmdW5jdGlvbnMuIE5vdGUgdGhhdCBpdCBvbmx5IHdvcmtzXG4gICAqICAgaW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VgLCBhbmQgb25seSB3aGVuXG4gICAqICAgYENoYWkuY29uZmlnLmluY2x1ZGVTdGFja2AgaGFzbid0IGJlZW4gc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIC0gYGxvY2tTc2ZpYDogVGhpcyBmbGFnIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBgc3NmaWAgZmxhZ1xuICAgKiAgIHNob3VsZCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWUsIGV2ZW4gYXMgYXNzZXJ0aW9ucyBhcmUgY2hhaW5lZCBvZmYgb2ZcbiAgICogICB0aGlzIG9iamVjdC4gVGhpcyBpcyB1c3VhbGx5IHNldCB0byBgdHJ1ZWAgd2hlbiBjcmVhdGluZyBhIG5ldyBhc3NlcnRpb25cbiAgICogICBmcm9tIHdpdGhpbiBhbm90aGVyIGFzc2VydGlvbi4gSXQncyBhbHNvIHRlbXBvcmFyaWx5IHNldCB0byBgdHJ1ZWAgYmVmb3JlXG4gICAqICAgYW4gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uXG4gICAqXG4gICAqIC0gYGVxbGA6IFRoaXMgZmxhZyBjb250YWlucyB0aGUgZGVlcEVxdWFsIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYnkgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqIHRhcmdldCBvZiB0aGUgYXNzZXJ0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgKG9wdGlvbmFsKSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzc2ZpIChvcHRpb25hbCkgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIHN0YWNrIGZyYW1lc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGxvY2tTc2ZpIChvcHRpb25hbCkgd2hldGhlciBvciBub3QgdGhlIHNzZmkgZmxhZyBpcyBsb2NrZWRcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIEFzc2VydGlvbiAob2JqLCBtc2csIHNzZmksIGxvY2tTc2ZpKSB7XG4gICAgZmxhZyh0aGlzLCAnc3NmaScsIHNzZmkgfHwgQXNzZXJ0aW9uKTtcbiAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIGxvY2tTc2ZpKTtcbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBvYmopO1xuICAgIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIGZsYWcodGhpcywgJ2VxbCcsIGNvbmZpZy5kZWVwRXF1YWwgfHwgdXRpbC5lcWwpO1xuXG4gICAgcmV0dXJuIHV0aWwucHJveGlmeSh0aGlzKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sICdpbmNsdWRlU3RhY2snLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXNzZXJ0aW9uLCAnc2hvd0RpZmYnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgY29uZmlnLnNob3dEaWZmID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLmFkZFByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwuYWRkTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHV0aWwuYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdXRpbC5vdmVyd3JpdGVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLm92ZXJ3cml0ZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgICB1dGlsLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmFzc2VydChleHByZXNzaW9uLCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlLCBleHBlY3RlZCwgYWN0dWFsLCBzaG93RGlmZilcbiAgICpcbiAgICogRXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiBhbmQgY2hlY2sgZXhwZWN0YXRpb25zLiBUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgZm9yIHJlcG9ydGluZyBpZiB0ZXN0IGRvZXNuJ3QgcGFzcy5cbiAgICpcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBwYXJhbSB7UGhpbG9zb3BoaWNhbH0gZXhwcmVzc2lvbiB0byBiZSB0ZXN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG1lc3NhZ2Ugb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG1lc3NhZ2UgdG8gZGlzcGxheSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBuZWdhdGVkTWVzc2FnZSBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbmVnYXRlZE1lc3NhZ2UgdG8gZGlzcGxheSBpZiBuZWdhdGVkIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWQgdmFsdWUgKHJlbWVtYmVyIHRvIGNoZWNrIGZvciBuZWdhdGlvbilcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsIChvcHRpb25hbCkgd2lsbCBkZWZhdWx0IHRvIGB0aGlzLm9iamBcbiAgICogQHBhcmFtIHtCb29sZWFufSBzaG93RGlmZiAob3B0aW9uYWwpIHdoZW4gc2V0IHRvIGB0cnVlYCwgYXNzZXJ0IHdpbGwgZGlzcGxheSBhIGRpZmYgaW4gYWRkaXRpb24gdG8gdGhlIG1lc3NhZ2UgaWYgZXhwcmVzc2lvbiBmYWlsc1xuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICAgIHZhciBvayA9IHV0aWwudGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpIHNob3dEaWZmID0gdHJ1ZTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBleHBlY3RlZCAmJiB1bmRlZmluZWQgPT09IF9hY3R1YWwpIHNob3dEaWZmID0gZmFsc2U7XG4gICAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZikgc2hvd0RpZmYgPSBmYWxzZTtcblxuICAgIGlmICghb2spIHtcbiAgICAgIG1zZyA9IHV0aWwuZ2V0TWVzc2FnZSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdmFyIGFjdHVhbCA9IHV0aWwuZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB2YXIgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICwgc2hvd0RpZmY6IHNob3dEaWZmXG4gICAgICB9O1xuXG4gICAgICB2YXIgb3BlcmF0b3IgPSB1dGlsLmdldE9wZXJhdG9yKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgbXNnLFxuICAgICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMsXG4gICAgICAgIChjb25maWcuaW5jbHVkZVN0YWNrKSA/IHRoaXMuYXNzZXJ0IDogZmxhZyh0aGlzLCAnc3NmaScpKTtcbiAgICB9XG4gIH07XG5cbiAgLyohXG4gICAqICMjIyAuX29ialxuICAgKlxuICAgKiBRdWljayByZWZlcmVuY2UgdG8gc3RvcmVkIGBhY3R1YWxgIHZhbHVlIGZvciBwbHVnaW4gZGV2ZWxvcGVycy5cbiAgICpcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24ucHJvdG90eXBlLCAnX29iaicsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgICAgfVxuICAgICwgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIHZhbCk7XG4gICAgICB9XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIGh0dHA6Ly9jaGFpanMuY29tXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2hhaSwgXykge1xuICB2YXIgQXNzZXJ0aW9uID0gY2hhaS5Bc3NlcnRpb25cbiAgICAsIEFzc2VydGlvbkVycm9yID0gY2hhaS5Bc3NlcnRpb25FcnJvclxuICAgICwgZmxhZyA9IF8uZmxhZztcblxuICAvKipcbiAgICogIyMjIExhbmd1YWdlIENoYWluc1xuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGFyZSBwcm92aWRlZCBhcyBjaGFpbmFibGUgZ2V0dGVycyB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eVxuICAgKiBvZiB5b3VyIGFzc2VydGlvbnMuXG4gICAqXG4gICAqICoqQ2hhaW5zKipcbiAgICpcbiAgICogLSB0b1xuICAgKiAtIGJlXG4gICAqIC0gYmVlblxuICAgKiAtIGlzXG4gICAqIC0gdGhhdFxuICAgKiAtIHdoaWNoXG4gICAqIC0gYW5kXG4gICAqIC0gaGFzXG4gICAqIC0gaGF2ZVxuICAgKiAtIHdpdGhcbiAgICogLSBhdFxuICAgKiAtIG9mXG4gICAqIC0gc2FtZVxuICAgKiAtIGJ1dFxuICAgKiAtIGRvZXNcbiAgICogLSBzdGlsbFxuICAgKiAtIGFsc29cbiAgICpcbiAgICogQG5hbWUgbGFuZ3VhZ2UgY2hhaW5zXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIFsgJ3RvJywgJ2JlJywgJ2JlZW4nLCAnaXMnXG4gICwgJ2FuZCcsICdoYXMnLCAnaGF2ZScsICd3aXRoJ1xuICAsICd0aGF0JywgJ3doaWNoJywgJ2F0JywgJ29mJ1xuICAsICdzYW1lJywgJ2J1dCcsICdkb2VzJywgJ3N0aWxsJywgXCJhbHNvXCIgXS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFpbikge1xuICAgIEFzc2VydGlvbi5hZGRQcm9wZXJ0eShjaGFpbik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFxuICAgKlxuICAgKiBOZWdhdGVzIGFsbCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbi5cbiAgICpcbiAgICogICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7fSkudG8ubm90LnRocm93KCk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5kb2VzLm5vdC5pbmNsdWRlKDMpO1xuICAgKlxuICAgKiBKdXN0IGJlY2F1c2UgeW91IGNhbiBuZWdhdGUgYW55IGFzc2VydGlvbiB3aXRoIGAubm90YCBkb2Vzbid0IG1lYW4geW91XG4gICAqIHNob3VsZC4gV2l0aCBncmVhdCBwb3dlciBjb21lcyBncmVhdCByZXNwb25zaWJpbGl0eS4gSXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IHRoZSBvbmUgZXhwZWN0ZWQgb3V0cHV0IHdhcyBwcm9kdWNlZCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nXG4gICAqIHRoYXQgb25lIG9mIGNvdW50bGVzcyB1bmV4cGVjdGVkIG91dHB1dHMgd2Fzbid0IHByb2R1Y2VkLiBTZWUgaW5kaXZpZHVhbFxuICAgKiBhc3NlcnRpb25zIGZvciBzcGVjaWZpYyBndWlkYW5jZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuZXF1YWwoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBAbmFtZSBub3RcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdub3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnbmVnYXRlJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmVxdWFsYCwgYC5pbmNsdWRlYCwgYC5tZW1iZXJzYCwgYC5rZXlzYCwgYW5kIGAucHJvcGVydHlgXG4gICAqIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQgb2Ygc3RyaWN0XG4gICAqIChgPT09YCkgZXF1YWxpdHkuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXBcbiAgICogZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFscyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZGVlcC5lcXVhbCh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmVxdWFsKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5kZWVwLmluY2x1ZGUoe2E6IDF9KTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmluY2x1ZGUoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5kZWVwLmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMgbWVtYmVyIGB7YTogMX1gXG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmhhdmUubWVtYmVycyhbe2E6IDF9XSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgc2V0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIGtleSBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoW3thOiAxfV0pKS50by5oYXZlLmRlZXAua2V5cyhbe2E6IDF9XSk7XG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLm5vdC5oYXZlLmtleXMoW3thOiAxfV0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBwcm9wZXJ0eSBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdkZWVwJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2RlZXAnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubmVzdGVkXG4gICAqXG4gICAqIEVuYWJsZXMgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBpbiBhbGwgYC5wcm9wZXJ0eWAgYW5kIGAuaW5jbHVkZWBcbiAgICogYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4uXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KCdhLmJbMV0nKTtcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8ubmVzdGVkLmluY2x1ZGUoeydhLmJbMV0nOiAneSd9KTtcbiAgICpcbiAgICogSWYgYC5gIG9yIGBbXWAgYXJlIHBhcnQgb2YgYW4gYWN0dWFsIHByb3BlcnR5IG5hbWUsIHRoZXkgY2FuIGJlIGVzY2FwZWQgYnlcbiAgICogYWRkaW5nIHR3byBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlbS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7Jy5hJzogeydbYl0nOiAneCd9fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ1xcXFwuYS5cXFxcW2JcXFxcXScpO1xuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5uZXN0ZWQuaW5jbHVkZSh7J1xcXFwuYS5cXFxcW2JcXFxcXSc6ICd4J30pO1xuICAgKlxuICAgKiBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC5vd25gLlxuICAgKlxuICAgKiBAbmFtZSBuZXN0ZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCduZXN0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnbmVzdGVkJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blxuICAgKlxuICAgKiBDYXVzZXMgYWxsIGAucHJvcGVydHlgIGFuZCBgLmluY2x1ZGVgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluXG4gICAqIHRvIGlnbm9yZSBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93bi5wcm9wZXJ0eSgnYScpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5vd24uaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZSh7YjogMn0pLmJ1dC5ub3Qub3duLmluY2x1ZGUoe2I6IDJ9KTtcbiAgICpcbiAgICogYC5vd25gIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAubmVzdGVkYC5cbiAgICpcbiAgICogQG5hbWUgb3duXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnb3duJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ293bicsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5vcmRlcmVkXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5tZW1iZXJzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXRcbiAgICogbWVtYmVycyBiZSBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmhhdmUub3JkZXJlZC5tZW1iZXJzKFsxLCAyXSlcbiAgICogICAgICAgLmJ1dC5ub3QuaGF2ZS5vcmRlcmVkLm1lbWJlcnMoWzIsIDFdKTtcbiAgICpcbiAgICogV2hlbiBgLmluY2x1ZGVgIGFuZCBgLm9yZGVyZWRgIGFyZSBjb21iaW5lZCwgdGhlIG9yZGVyaW5nIGJlZ2lucyBhdCB0aGVcbiAgICogc3RhcnQgb2YgYm90aCBhcnJheXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhbMSwgMl0pXG4gICAqICAgICAgIC5idXQubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKFsyLCAzXSk7XG4gICAqXG4gICAqIEBuYW1lIG9yZGVyZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvcmRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ29yZGVyZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYW55XG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBvbmx5IHJlcXVpcmUgdGhhdFxuICAgKiB0aGUgdGFyZ2V0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBnaXZlbiBrZXlzLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZlxuICAgKiBgLmFsbGAsIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIHRhcmdldCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4ga2V5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogU2VlIHRoZSBgLmtleXNgIGRvYyBmb3IgZ3VpZGFuY2Ugb24gd2hlbiB0byB1c2UgYC5hbnlgIG9yIGAuYWxsYC5cbiAgICpcbiAgICogQG5hbWUgYW55XG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYW55JywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2FueScsIHRydWUpO1xuICAgIGZsYWcodGhpcywgJ2FsbCcsIGZhbHNlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYWxsXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXQgdGhlXG4gICAqIHRhcmdldCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4ga2V5cy4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgYC5hbnlgLCB3aGljaFxuICAgKiBvbmx5IHJlcXVpcmVzIHRoYXQgdGhlIHRhcmdldCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW4ga2V5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYC5hbGxgIGlzIHVzZWQgYnkgZGVmYXVsdCB3aGVuIG5laXRoZXIgYC5hbGxgIG5vciBgLmFueWAgYXJlXG4gICAqIGFkZGVkIGVhcmxpZXIgaW4gdGhlIGNoYWluLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYWRkIGAuYWxsYCBhbnl3YXlcbiAgICogYmVjYXVzZSBpdCBpbXByb3ZlcyByZWFkYWJpbGl0eS5cbiAgICpcbiAgICogU2VlIHRoZSBgLmtleXNgIGRvYyBmb3IgZ3VpZGFuY2Ugb24gd2hlbiB0byB1c2UgYC5hbnlgIG9yIGAuYWxsYC5cbiAgICpcbiAgICogQG5hbWUgYWxsXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYWxsJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2FsbCcsIHRydWUpO1xuICAgIGZsYWcodGhpcywgJ2FueScsIGZhbHNlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYSh0eXBlWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQncyB0eXBlIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBzdHJpbmcgYHR5cGVgLiBUeXBlc1xuICAgKiBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4gU2VlIHRoZSBgdHlwZS1kZXRlY3RgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGVcbiAgICogdHlwZSBkZXRlY3Rpb24gYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL3R5cGUtZGV0ZWN0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmJlLmFuKCdvYmplY3QnKTtcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5hKCdudWxsJyk7XG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5iZS5hbigndW5kZWZpbmVkJyk7XG4gICAqICAgICBleHBlY3QobmV3IEVycm9yKS50by5iZS5hbignZXJyb3InKTtcbiAgICogICAgIGV4cGVjdChQcm9taXNlLnJlc29sdmUoKSkudG8uYmUuYSgncHJvbWlzZScpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBGbG9hdDMyQXJyYXkpLnRvLmJlLmEoJ2Zsb2F0MzJhcnJheScpO1xuICAgKiAgICAgZXhwZWN0KFN5bWJvbCgpKS50by5iZS5hKCdzeW1ib2wnKTtcbiAgICpcbiAgICogYC5hYCBzdXBwb3J0cyBvYmplY3RzIHRoYXQgaGF2ZSBhIGN1c3RvbSB0eXBlIHNldCB2aWEgYFN5bWJvbC50b1N0cmluZ1RhZ2AuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7XG4gICAqICAgICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnbXlDdXN0b21UeXBlJ1xuICAgKiAgICAgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChteU9iaikudG8uYmUuYSgnbXlDdXN0b21UeXBlJykuYnV0Lm5vdC5hbignb2JqZWN0Jyk7XG4gICAqXG4gICAqIEl0J3Mgb2Z0ZW4gYmVzdCB0byB1c2UgYC5hYCB0byBjaGVjayBhIHRhcmdldCdzIHR5cGUgYmVmb3JlIG1ha2luZyBtb3JlXG4gICAqIGFzc2VydGlvbnMgb24gdGhlIHNhbWUgdGFyZ2V0LiBUaGF0IHdheSwgeW91IGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZnJvbVxuICAgKiBhbnkgYXNzZXJ0aW9uIHRoYXQgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pbmNsdWRlcygyKTtcbiAgICogICAgIGV4cGVjdChbXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pcy5lbXB0eTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5hYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgdGhlIGV4cGVjdGVkIHR5cGUsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0XG4gICAqIGlzbid0IG9uZSBvZiBtYW55IHVuZXhwZWN0ZWQgdHlwZXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuYW4oJ2FycmF5Jyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmFgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSB0b1xuICAgKiBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZFxuICAgKiBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hKCdzdHJpbmcnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgKlxuICAgKiBgLmFgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBsYW5ndWFnZSBjaGFpbiB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eSBvZlxuICAgKiB5b3VyIGFzc2VydGlvbnMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5oYXZlLmEucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuYWAuXG4gICAqXG4gICAqIEBuYW1lIGFcbiAgICogQGFsaWFzIGFuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhbiAodHlwZSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgYXJ0aWNsZSA9IH5bICdhJywgJ2UnLCAnaScsICdvJywgJ3UnIF0uaW5kZXhPZih0eXBlLmNoYXJBdCgwKSkgPyAnYW4gJyA6ICdhICc7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdHlwZSA9PT0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSAnICsgYXJ0aWNsZSArIHR5cGVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlICcgKyBhcnRpY2xlICsgdHlwZVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdhbicsIGFuKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnYScsIGFuKTtcblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlKHZhbFssIG1zZ10pXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIHN0cmluZywgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIHN0cmluZyBgdmFsYFxuICAgKiBpcyBhIHN1YnN0cmluZyBvZiB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5pbmNsdWRlKCdmb28nKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGFuIGFycmF5LCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gYHZhbGAgaXMgYVxuICAgKiBtZW1iZXIgb2YgdGhlIHRhcmdldC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUoMik7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhbiBvYmplY3QsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBvYmplY3RcbiAgICogYHZhbGAncyBwcm9wZXJ0aWVzIGFyZSBhIHN1YnNldCBvZiB0aGUgdGFyZ2V0J3MgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUoe2E6IDEsIGI6IDJ9KTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgU2V0IG9yIFdlYWtTZXQsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBhXG4gICAqIG1lbWJlciBvZiB0aGUgdGFyZ2V0LiBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDJdKSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgTWFwLCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gYHZhbGAgaXMgb25lIG9mXG4gICAqIHRoZSB2YWx1ZXMgb2YgdGhlIHRhcmdldC4gU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG0gaXMgdXNlZC5cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgTWFwKFtbJ2EnLCAxXSwgWydiJywgMl1dKSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogQmVjYXVzZSBgLmluY2x1ZGVgIGRvZXMgZGlmZmVyZW50IHRoaW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0J3MgdHlwZSwgaXQnc1xuICAgKiBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlIHVzaW5nIGAuaW5jbHVkZWAuIFNlZSB0aGUgYC5hYFxuICAgKiBkb2MgZm9yIGluZm8gb24gdGVzdGluZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5iZS5hbignYXJyYXknKS50aGF0LmluY2x1ZGVzKDIpO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eSBpcyB1c2VkIHRvIGNvbXBhcmUgYXJyYXkgbWVtYmVycyBhbmRcbiAgICogb2JqZWN0IHByb3BlcnRpZXMuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5XG4gICAqIGluc3RlYWQgKFdlYWtTZXQgdGFyZ2V0cyBhcmUgbm90IHN1cHBvcnRlZCkuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0XG4gICAqIHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaW5jbHVkZXMgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uZGVlcC5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLm5vdC5pbmNsdWRlKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaW5jbHVkZXMgYHg6IHthOiAxfWBcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uZGVlcC5pbmNsdWRlKHt4OiB7YTogMX19KTtcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8ubm90LmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgb2YgdGhlIHRhcmdldCdzIHByb3BlcnRpZXMgYXJlIHNlYXJjaGVkIHdoZW4gd29ya2luZyB3aXRoXG4gICAqIG9iamVjdHMuIFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IGFyZSBpbmhlcml0ZWQgYW5kL29yIG5vbi1lbnVtZXJhYmxlLlxuICAgKiBBZGQgYC5vd25gIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGV4Y2x1ZGUgdGhlIHRhcmdldCdzIGluaGVyaXRlZFxuICAgKiBwcm9wZXJ0aWVzIGZyb20gdGhlIHNlYXJjaC5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5vd24uaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZSh7YjogMn0pLmJ1dC5ub3Qub3duLmluY2x1ZGUoe2I6IDJ9KTtcbiAgICpcbiAgICogTm90ZSB0aGF0IGEgdGFyZ2V0IG9iamVjdCBpcyBhbHdheXMgb25seSBzZWFyY2hlZCBmb3IgYHZhbGAncyBvd25cbiAgICogZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm93bmAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogMn19KS50by5kZWVwLm93bi5pbmNsdWRlKHthOiB7YjogMn19KTtcbiAgICpcbiAgICogQWRkIGAubmVzdGVkYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBlbmFibGUgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiB3aGVuXG4gICAqIHJlZmVyZW5jaW5nIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5uZXN0ZWQuaW5jbHVkZSh7J2EuYlsxXSc6ICd5J30pO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6IDJ9fSkudG8ubmVzdGVkLmluY2x1ZGUoeydcXFxcLmEuXFxcXFtiXFxcXF0nOiAyfSk7XG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAubmVzdGVkYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbe2M6IDN9XX19KS50by5kZWVwLm5lc3RlZC5pbmNsdWRlKHsnYS5iWzBdJzoge2M6IDN9fSk7XG4gICAqXG4gICAqIGAub3duYCBhbmQgYC5uZXN0ZWRgIGNhbm5vdCBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5pbmNsdWRlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubm90LmluY2x1ZGUoJ3RhY28nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5pbmNsdWRlKDQpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5pbmNsdWRlYCB3aGVuIHRoZSB0YXJnZXQgaXMgYW4gb2JqZWN0LlxuICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGVcbiAgICogdGFyZ2V0IG9iamVjdCBkb2Vzbid0IGhhdmUgYWxsIG9mIGB2YWxgJ3Mga2V5L3ZhbHVlIHBhaXJzIGJ1dCBtYXkgb3IgbWF5XG4gICAqIG5vdCBoYXZlIHNvbWUgb2YgdGhlbS4gSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzXG4gICAqIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBvYmplY3QgaXNuJ3QgZXZlbiBleHBlY3RlZCB0byBoYXZlIGB2YWxgJ3Mga2V5cywgaXQnc1xuICAgKiBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2M6IDN9KS50by5ub3QuaGF2ZS5hbnkua2V5cygnYScsICdiJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2M6IDN9KS50by5ub3QuaW5jbHVkZSh7YTogMSwgYjogMn0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IG9iamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIGB2YWxgJ3Mga2V5cywgaXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IGVhY2ggb2YgdGhlIHByb3BlcnRpZXMgaGFzIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgZWFjaCBwcm9wZXJ0eSBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDMsIGI6IDR9KS50by5pbmNsdWRlKHthOiAzLCBiOiA0fSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDMsIGI6IDR9KS50by5ub3QuaW5jbHVkZSh7YTogMSwgYjogMn0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5pbmNsdWRlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlKDQsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNsdWRlKDQpO1xuICAgKlxuICAgKiBgLmluY2x1ZGVgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBsYW5ndWFnZSBjaGFpbiwgY2F1c2luZyBhbGwgYC5tZW1iZXJzYCBhbmRcbiAgICogYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoZSB0YXJnZXQgdG8gYmUgYVxuICAgKiBzdXBlcnNldCBvZiB0aGUgZXhwZWN0ZWQgc2V0LCByYXRoZXIgdGhhbiBhbiBpZGVudGljYWwgc2V0LiBOb3RlIHRoYXRcbiAgICogYC5tZW1iZXJzYCBpZ25vcmVzIGR1cGxpY2F0ZXMgaW4gdGhlIHN1YnNldCB3aGVuIGAuaW5jbHVkZWAgaXMgYWRkZWQuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0J3Mga2V5cyBhcmUgYSBzdXBlcnNldCBvZiBbJ2EnLCAnYiddIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDIsIGM6IDN9KS50by5pbmNsdWRlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLm5vdC5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBpcyBhIHN1cGVyc2V0IG9mIFsxLCAyXSBidXQgbm90IGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuaGF2ZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqXG4gICAqICAgICAvLyBEdXBsaWNhdGVzIGluIHRoZSBzdWJzZXQgYXJlIGlnbm9yZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUubWVtYmVycyhbMSwgMiwgMiwgMl0pO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYWRkaW5nIGAuYW55YCBlYXJsaWVyIGluIHRoZSBjaGFpbiBjYXVzZXMgdGhlIGAua2V5c2AgYXNzZXJ0aW9uXG4gICAqIHRvIGlnbm9yZSBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiAgICAgLy8gQm90aCBhc3NlcnRpb25zIGFyZSBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmluY2x1ZGUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAuaW5jbHVkZXNgLCBgLmNvbnRhaW5gLCBhbmQgYC5jb250YWluc2AgY2FuIGJlIHVzZWRcbiAgICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5pbmNsdWRlYC5cbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZVxuICAgKiBAYWxpYXMgY29udGFpblxuICAgKiBAYWxpYXMgaW5jbHVkZXNcbiAgICogQGFsaWFzIGNvbnRhaW5zXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gU2FtZVZhbHVlWmVybyhhLCBiKSB7XG4gICAgcmV0dXJuIChfLmlzTmFOKGEpICYmIF8uaXNOYU4oYikpIHx8IGEgPT09IGI7XG4gIH1cblxuICBmdW5jdGlvbiBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvciAoKSB7XG4gICAgZmxhZyh0aGlzLCAnY29udGFpbnMnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGUgKHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBuZWdhdGUgPSBmbGFnKHRoaXMsICduZWdhdGUnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBkZXNjcmlwdG9yID0gaXNEZWVwID8gJ2RlZXAgJyA6ICcnXG4gICAgICAsIGlzRXFsID0gaXNEZWVwID8gZmxhZyh0aGlzLCAnZXFsJykgOiBTYW1lVmFsdWVaZXJvO1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gICAgdmFyIGluY2x1ZGVkID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWFrc2V0JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICAgIGZsYWdNc2cgKyAndW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldCcsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2V0JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIGluY2x1ZGVkID0gb2JqLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVGhpcyBibG9jayBpcyBmb3IgYXNzZXJ0aW5nIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgICAgICAvLyBgXy5leHBlY3RUeXBlc2AgaXNuJ3QgdXNlZCBoZXJlIGJlY2F1c2UgYC5pbmNsdWRlYCBzaG91bGQgd29yayB3aXRoXG4gICAgICAgIC8vIG9iamVjdHMgd2l0aCBhIGN1c3RvbSBgQEB0b1N0cmluZ1RhZ2AuXG4gICAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICd0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzICgnXG4gICAgICAgICAgICArIG9ialR5cGUgKyAnIGFuZCAnXG4gICAgICAgICAgICArIF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkgKyAnKSdcbiAgICAgICAgICAgICsgJyBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gJ1xuICAgICAgICAgICAgKyAnWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgJ1xuICAgICAgICAgICAgKyAnb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSAnXG4gICAgICAgICAgICArIF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKHZhbClcbiAgICAgICAgICAsIGZpcnN0RXJyID0gbnVsbFxuICAgICAgICAgICwgbnVtRXJycyA9IDA7XG5cbiAgICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHZhciBwcm9wQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihvYmopO1xuICAgICAgICAgIF8udHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgICBmbGFnKHByb3BBc3NlcnRpb24sICdsb2NrU3NmaScsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICghXy5jaGVja0Vycm9yLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgICAgbnVtRXJycysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgLy8gV2hlbiB2YWxpZGF0aW5nIC5ub3QuaW5jbHVkZSB3aXRoIG11bHRpcGxlIHByb3BlcnRpZXMsIHdlIG9ubHkgd2FudFxuICAgICAgICAvLyB0byB0aHJvdyBhbiBhc3NlcnRpb24gZXJyb3IgaWYgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZCxcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB0aHJvdyB0aGUgZmlyc3QgcHJvcGVydHkgYXNzZXJ0aW9uIGVycm9yIHRoYXQgd2VcbiAgICAgICAgLy8gZW5jb3VudGVyZWQuXG4gICAgICAgIGlmIChuZWdhdGUgJiYgcHJvcHMubGVuZ3RoID4gMSAmJiBudW1FcnJzID09PSBwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdEVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXNzZXJ0IGluY2x1c2lvbiBpbiBjb2xsZWN0aW9uIG9yIHN1YnN0cmluZyBpbiBhIHN0cmluZy5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGluY2x1ZGVkXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvICcgKyBkZXNjcmlwdG9yICsgJ2luY2x1ZGUgJyArIF8uaW5zcGVjdCh2YWwpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCAnICsgZGVzY3JpcHRvciArICdpbmNsdWRlICcgKyBfLmluc3BlY3QodmFsKSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdpbmNsdWRlJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdjb250YWlucycsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnaW5jbHVkZXMnLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5cbiAgLyoqXG4gICAqICMjIyAub2tcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSB0cnV0aHkgdmFsdWUgKGNvbnNpZGVyZWQgYHRydWVgIGluIGJvb2xlYW4gY29udGV4dCkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgb3JcbiAgICogZGVlcGx5IGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub2tgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDApLnRvLmVxdWFsKDApOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDApLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLmZhbHNlOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5ub3QuYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobnVsbCkudG8ubm90LmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5vaztcbiAgICpcbiAgICogQG5hbWUgb2tcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvaycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzeScpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC50cnVlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYHRydWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLmJlLnRydWU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAudHJ1ZWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90XG4gICAqIGVxdWFsIHRvIGB0cnVlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8uYmUuZmFsc2U7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLm5vdC5iZS50cnVlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUudHJ1ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS50cnVlO1xuICAgKlxuICAgKiBAbmFtZSB0cnVlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdHJ1ZSA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2UnXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gZmFsc2UgOiB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZmFsc2VcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5iZS5mYWxzZTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5mYWxzZWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogbm90IGVxdWFsIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5ub3QuYmUuZmFsc2U7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5mYWxzZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZhbHNlO1xuICAgKlxuICAgKiBAbmFtZSBmYWxzZVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2ZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBmYWxzZSA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2UnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWUnXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gdHJ1ZSA6IGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubnVsbFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGBudWxsYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5udWxsO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm51bGxgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuIG5vdFxuICAgKiBlcXVhbCB0byBgbnVsbGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLm51bGw7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUubnVsbDtcbiAgICpcbiAgICogQG5hbWUgbnVsbFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ251bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG51bGwgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGwnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnVuZGVmaW5lZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8uYmUudW5kZWZpbmVkO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnVuZGVmaW5lZGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogbm90IGVxdWFsIHRvIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS51bmRlZmluZWQ7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUudW5kZWZpbmVkO1xuICAgKlxuICAgKiBAbmFtZSB1bmRlZmluZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHVuZGVmaW5lZCA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdW5kZWZpbmVkJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLk5hTlxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBleGFjdGx5IGBOYU5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KE5hTikudG8uYmUuTmFOO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLk5hTmAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90XG4gICAqIGVxdWFsIHRvIGBOYU5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5lcXVhbCgnZm9vJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5iZS5OYU47IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuTmFOO1xuICAgKlxuICAgKiBAbmFtZSBOYU5cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIF8uaXNOYU4oZmxhZyh0aGlzLCAnb2JqZWN0JykpXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOJ1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU4nXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXhpc3RcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgbm90IHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gZWl0aGVyIGBudWxsYCBvclxuICAgKiBgdW5kZWZpbmVkYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG9cbiAgICogaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCgwKS50by5lcXVhbCgwKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgwKS50by5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXhpc3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobnVsbCkudG8ubm90LmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLm5vdC5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QobnVsbCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmV4aXN0O1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5leGlzdHNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuZXhpc3RgLlxuICAgKlxuICAgKiBAbmFtZSBleGlzdFxuICAgKiBAYWxpYXMgZXhpc3RzXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEV4aXN0ICgpIHtcbiAgICB2YXIgdmFsID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBleGlzdCdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGV4aXN0J1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4aXN0JywgYXNzZXJ0RXhpc3QpO1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4aXN0cycsIGFzc2VydEV4aXN0KTtcblxuICAvKipcbiAgICogIyMjIC5lbXB0eVxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBzdHJpbmcgb3IgYXJyYXksIGAuZW1wdHlgIGFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3NcbiAgICogYGxlbmd0aGAgcHJvcGVydHkgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgMGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoW10pLnRvLmJlLmVtcHR5O1xuICAgKiAgICAgZXhwZWN0KCcnKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbWFwIG9yIHNldCwgYC5lbXB0eWAgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQncyBgc2l6ZWBcbiAgICogcHJvcGVydHkgaXMgc3RyaWN0bHkgZXF1YWwgdG8gYDBgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoKSkudG8uYmUuZW1wdHk7XG4gICAqICAgICBleHBlY3QobmV3IE1hcCgpKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgYC5lbXB0eWAgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXRcbiAgICogZG9lc24ndCBoYXZlIGFueSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBQcm9wZXJ0aWVzIHdpdGggU3ltYm9sLWJhc2VkXG4gICAqIGtleXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvdW50LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt9KS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogQmVjYXVzZSBgLmVtcHR5YCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIHRhcmdldCdzIHR5cGUsIGl0J3NcbiAgICogaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB0YXJnZXQncyB0eXBlIGJlZm9yZSB1c2luZyBgLmVtcHR5YC4gU2VlIHRoZSBgLmFgXG4gICAqIGRvYyBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pcy5lbXB0eTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5lbXB0eWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGNvbnRhaW5zIGl0cyBleHBlY3RlZCBudW1iZXIgb2YgdmFsdWVzLFxuICAgKiByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCdzIG5vdCBlbXB0eS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuYmUuZW1wdHk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDIsIDNdKSkudG8uaGF2ZS5wcm9wZXJ0eSgnc2l6ZScsIDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDIsIDNdKSkudG8ubm90LmJlLmVtcHR5OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChPYmplY3Qua2V5cyh7YTogMX0pKS50by5oYXZlLmxlbmd0aE9mKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmVtcHR5OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogQG5hbWUgZW1wdHlcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIGl0ZW1zQ291bnQ7XG5cbiAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG5cbiAgICBzd2l0Y2ggKF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICBjYXNlICdzZXQnOlxuICAgICAgICBpdGVtc0NvdW50ID0gdmFsLnNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vha21hcCc6XG4gICAgICBjYXNlICd3ZWFrc2V0JzpcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyAnLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb24nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHZhciBtc2cgPSBmbGFnTXNnICsgJy5lbXB0eSB3YXMgcGFzc2VkIGEgZnVuY3Rpb24gJyArIF8uZ2V0TmFtZSh2YWwpO1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnLnRyaW0oKSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICcuZW1wdHkgd2FzIHBhc3NlZCBub24tc3RyaW5nIHByaW1pdGl2ZSAnICsgXy5pbnNwZWN0KHZhbCksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIDAgPT09IGl0ZW1zQ291bnRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHknXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBlbXB0eSdcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hcmd1bWVudHNcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gdGVzdCAoKSB7XG4gICAqICAgICAgIGV4cGVjdChhcmd1bWVudHMpLnRvLmJlLmFyZ3VtZW50cztcbiAgICogICAgIH1cbiAgICpcbiAgICogICAgIHRlc3QoKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5hcmd1bWVudHNgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHdoaWNoIHR5cGUgdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBiZSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgaXRcdTIwMTlzIG5vdCBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuYXJndW1lbnRzOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7fSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFyZ3VtZW50cztcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuQXJndW1lbnRzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmFyZ3VtZW50c2AuXG4gICAqXG4gICAqIEBuYW1lIGFyZ3VtZW50c1xuICAgKiBAYWxpYXMgQXJndW1lbnRzXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzICgpIHtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgdHlwZSA9IF8udHlwZShvYmopO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAnQXJndW1lbnRzJyA9PT0gdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCAnICsgdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2FyZ3VtZW50cycsIGNoZWNrQXJndW1lbnRzKTtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdBcmd1bWVudHMnLCBjaGVja0FyZ3VtZW50cyk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXF1YWwodmFsWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byB0aGUgZ2l2ZW4gYHZhbGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7XG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmVxdWFsKCdmb28nKTtcbiAgICpcbiAgICogQWRkIGAuZGVlcGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZC4gU2VlIHRoZVxuICAgKiBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWxzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5kZWVwLmVxdWFsKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuZXF1YWwoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFscyBgWzEsIDJdYFxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uZGVlcC5lcXVhbChbMSwgMl0pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmVxdWFsKFsxLCAyXSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXF1YWxgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuXG4gICAqIG5vdCBlcXVhbCB0byBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgdmFsdWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5lcXVhbCgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuZXF1YWxgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmVxdWFsKDIpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmVxdWFsc2AgYW5kIGBlcWAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5lcXVhbGAuXG4gICAqXG4gICAqIEBuYW1lIGVxdWFsXG4gICAqIEBhbGlhcyBlcXVhbHNcbiAgICogQGFsaWFzIGVxXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXF1YWwgKHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIGlmIChmbGFnKHRoaXMsICdkZWVwJykpIHtcbiAgICAgIHZhciBwcmV2TG9ja1NzZmkgPSBmbGFnKHRoaXMsICdsb2NrU3NmaScpO1xuICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCB0cnVlKTtcbiAgICAgIHRoaXMuZXFsKHZhbCk7XG4gICAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHByZXZMb2NrU3NmaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIHZhbCA9PT0gb2JqXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH0nXG4gICAgICAgICwgdmFsXG4gICAgICAgICwgdGhpcy5fb2JqXG4gICAgICAgICwgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcXVhbCcsIGFzc2VydEVxdWFsKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXF1YWxzJywgYXNzZXJ0RXF1YWwpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcScsIGFzc2VydEVxdWFsKTtcblxuICAvKipcbiAgICogIyMjIC5lcWwob2JqWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgb2JqYC4gU2VlIHRoZVxuICAgKiBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGlzIGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWwgdG8ge2E6IDF9XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2E6IDF9KS5idXQubm90LmVxdWFsKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgaXMgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBlcXVhbCB0byBbMSwgMl1cbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmVxbChbMSwgMl0pLmJ1dC5ub3QuZXF1YWwoWzEsIDJdKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5lcWxgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBkZWVwbHkgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXJcbiAgICogdGhhbiBub3QgZGVlcGx5IGVxdWFsIHRvIG9uZSBvZiBjb3VudGxlc3MgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2E6IDF9KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5lcWwoe2I6IDJ9KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuZXFsYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2I6IDJ9LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uZXFsKHtiOiAyfSk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmVxbHNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuZXFsYC5cbiAgICpcbiAgICogVGhlIGAuZGVlcC5lcXVhbGAgYXNzZXJ0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gYC5lcWxgIGJ1dCB3aXRoIG9uZVxuICAgKiBkaWZmZXJlbmNlOiBgLmRlZXAuZXF1YWxgIGNhdXNlcyBkZWVwIGVxdWFsaXR5IGNvbXBhcmlzb25zIHRvIGFsc28gYmUgdXNlZFxuICAgKiBmb3IgYW55IG90aGVyIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluLlxuICAgKlxuICAgKiBAbmFtZSBlcWxcbiAgICogQGFsaWFzIGVxbHNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRFcWwob2JqLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZXFsID0gZmxhZyh0aGlzLCAnZXFsJyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGVxbChvYmosIGZsYWcodGhpcywgJ29iamVjdCcpKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZGVlcGx5IGVxdWFsICN7ZXhwfSdcbiAgICAgICwgb2JqXG4gICAgICAsIHRoaXMuX29ialxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbCcsIGFzc2VydEVxbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbHMnLCBhc3NlcnRFcWwpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmFib3ZlKG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LlxuICAgKiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYWJvdmUoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmFib3ZlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmFib3ZlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYWJvdmUoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hYm92ZSgyKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5ndGAgYW5kIGAuZ3JlYXRlclRoYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAuYWJvdmVgLlxuICAgKlxuICAgKiBAbmFtZSBhYm92ZVxuICAgKiBAYWxpYXMgZ3RcbiAgICogQGFsaWFzIGdyZWF0ZXJUaGFuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRBYm92ZSAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChuVHlwZSAhPT0gJ251bWJlcicgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA+IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdhYm92ZScsIGFzc2VydEFib3ZlKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3QnLCBhc3NlcnRBYm92ZSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2dyZWF0ZXJUaGFuJywgYXNzZXJ0QWJvdmUpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmxlYXN0KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlblxuICAgKiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0b1xuICAgKiBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubGVhc3QoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubGVuZ3RoT2ZgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYFxuICAgKiBvciBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYG5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5sZWFzdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5sZWFzdGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0LmxlYXN0KDIsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYXQubGVhc3QoMik7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAuZ3RlYCBhbmQgYC5ncmVhdGVyVGhhbk9yRXF1YWxgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAubGVhc3RgLlxuICAgKlxuICAgKiBAbmFtZSBsZWFzdFxuICAgKiBAYWxpYXMgZ3RlXG4gICAqIEBhbGlhcyBncmVhdGVyVGhhbk9yRXF1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydExlYXN0IChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBudW1iZXInO1xuICAgIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSAnZGF0ZScgJiYgb2JqVHlwZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgcHJpbnRPYmogPSAob2JqVHlwZSA9PT0gJ3N0cmluZycpID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICdleHBlY3RlZCAnICsgcHJpbnRPYmogKyAnIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgIH1cblxuICAgIGlmIChkb0xlbmd0aCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSAnbGVuZ3RoJ1xuICAgICAgICAsIGl0ZW1zQ291bnQ7XG4gICAgICBpZiAob2JqVHlwZSA9PT0gJ21hcCcgfHwgb2JqVHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9ICdzaXplJztcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBpdGVtc0NvdW50ID49IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGF0IGxlYXN0ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGJlbG93ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqID49IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVhc3QnLCBhc3NlcnRMZWFzdCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2d0ZScsIGFzc2VydExlYXN0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3JlYXRlclRoYW5PckVxdWFsJywgYXNzZXJ0TGVhc3QpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmJlbG93KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgbGVzcyB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LlxuICAgKiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYmVsb3coMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGgoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmJlbG93KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5iZWxvd2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8ubm90LmJlLmJlbG93KDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5iZWxvd2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmJlbG93KDEsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYmVsb3coMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAubHRgIGFuZCBgLmxlc3NUaGFuYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLmJlbG93YC5cbiAgICpcbiAgICogQG5hbWUgYmVsb3dcbiAgICogQGFsaWFzIGx0XG4gICAqIEBhbGlhcyBsZXNzVGhhblxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0QmVsb3cgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBuVHlwZSA9IF8udHlwZShuKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGVycm9yTWVzc2FnZVxuICAgICAgLCBzaG91bGRUaHJvdyA9IHRydWU7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgblR5cGUgIT09ICdkYXRlJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPCBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBiZWxvdyAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICAgLCBpdGVtc0NvdW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPCBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2JlbG93JywgYXNzZXJ0QmVsb3cpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsdCcsIGFzc2VydEJlbG93KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVzc1RoYW4nLCBhc3NlcnRCZWxvdyk7XG5cbiAgLyoqXG4gICAqICMjIyAubW9zdChuWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXIgb3IgYSBkYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyXG4gICAqIG9yIGRhdGUgYG5gIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzXG4gICAqIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0Lm1vc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0Lm1vc3QoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYXQubW9zdCg0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5tb3N0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuYmUuYXQubW9zdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAubW9zdGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmF0Lm1vc3QoMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hdC5tb3N0KDEpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmx0ZWAgYW5kIGAubGVzc1RoYW5PckVxdWFsYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLm1vc3RgLlxuICAgKlxuICAgKiBAbmFtZSBtb3N0XG4gICAqIEBhbGlhcyBsdGVcbiAgICogQGFsaWFzIGxlc3NUaGFuT3JFcXVhbFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TW9zdCAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPD0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA8PSBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbW9zdCcsIGFzc2VydE1vc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsdGUnLCBhc3NlcnRNb3N0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVzc1RoYW5PckVxdWFsJywgYXNzZXJ0TW9zdCk7XG5cbiAgLyoqXG4gICAqICMjIyAud2l0aGluKHN0YXJ0LCBmaW5pc2hbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlblxuICAgKiBudW1iZXIgb3IgZGF0ZSBgc3RhcnRgLCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgZmluaXNoYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS53aXRoaW4oMSwgMyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLndpdGhpbigyLCAzKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUud2l0aGluKDEsIDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubGVuZ3RoT2ZgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYFxuICAgKiBvciBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYHN0YXJ0YCwgYW5kIGxlc3NcbiAgICogdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyIGBmaW5pc2hgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi53aXRoaW4oMiwgNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLndpdGhpbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAud2l0aGluYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoNCkudG8uYmUud2l0aGluKDEsIDMsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCg0LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUud2l0aGluKDEsIDMpO1xuICAgKlxuICAgKiBAbmFtZSB3aXRoaW5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IGxvd2VyIGJvdW5kIGluY2x1c2l2ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gZmluaXNoIHVwcGVyIGJvdW5kIGluY2x1c2l2ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnd2l0aGluJywgZnVuY3Rpb24gKHN0YXJ0LCBmaW5pc2gsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBzdGFydFR5cGUgPSBfLnR5cGUoc3RhcnQpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZmluaXNoVHlwZSA9IF8udHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZVxuICAgICAgLCByYW5nZSA9IChzdGFydFR5cGUgPT09ICdkYXRlJyAmJiBmaW5pc2hUeXBlID09PSAnZGF0ZScpXG4gICAgICAgICAgPyBzdGFydC50b0lTT1N0cmluZygpICsgJy4uJyArIGZpbmlzaC50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBzdGFydCArICcuLicgKyBmaW5pc2g7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgKHN0YXJ0VHlwZSAhPT0gJ2RhdGUnIHx8IGZpbmlzaFR5cGUgIT09ICdkYXRlJykpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBkYXRlcyc7XG4gICAgfSBlbHNlIGlmICgoc3RhcnRUeXBlICE9PSAnbnVtYmVyJyB8fCBmaW5pc2hUeXBlICE9PSAnbnVtYmVyJykgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgbnVtYmVycyc7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPj0gc3RhcnQgJiYgaXRlbXNDb3VudCA8PSBmaW5pc2hcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyB3aXRoaW4gJyArIHJhbmdlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPj0gc3RhcnQgJiYgb2JqIDw9IGZpbmlzaFxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgd2l0aGluICcgKyByYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlb2YoY29uc3RydWN0b3JbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7IH1cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgQ2F0KCkpLnRvLmJlLmFuLmluc3RhbmNlb2YoQ2F0KTtcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluc3RhbmNlb2ZgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBgLmluc3RhbmNlb2ZgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hbi5pbnN0YW5jZW9mKEFycmF5LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgaW4gRVM1LCBgLmluc3RhbmNlb2ZgIG1heSBub3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWRcbiAgICogd2hlbiB1c2luZyBhIHRyYW5zcGlsZXIgc3VjaCBhcyBCYWJlbCBvciBUeXBlU2NyaXB0LiBJbiBwYXJ0aWN1bGFyLCBpdCBtYXlcbiAgICogcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiBzdWJjbGFzc2luZyBidWlsdC1pbiBvYmplY3Qgc3VjaCBhc1xuICAgKiBgQXJyYXlgLCBgRXJyb3JgLCBhbmQgYE1hcGAuIFNlZSB5b3VyIHRyYW5zcGlsZXIncyBkb2NzIGZvciBkZXRhaWxzOlxuICAgKlxuICAgKiAtIChbQmFiZWxdKGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL3VzYWdlL2NhdmVhdHMvI2NsYXNzZXMpKVxuICAgKiAtIChbVHlwZVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmspKVxuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5pbnN0YW5jZU9mYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmluc3RhbmNlb2ZgLlxuICAgKlxuICAgKiBAbmFtZSBpbnN0YW5jZW9mXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAYWxpYXMgaW5zdGFuY2VPZlxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZU9mIChjb25zdHJ1Y3RvciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgdGFyZ2V0ID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICB2YXIgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICB2YXIgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKTtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgaXNJbnN0YW5jZU9mID0gdGFyZ2V0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyAnVGhlIGluc3RhbmNlb2YgYXNzZXJ0aW9uIG5lZWRzIGEgY29uc3RydWN0b3IgYnV0ICdcbiAgICAgICAgICAgICsgXy50eXBlKGNvbnN0cnVjdG9yKSArICcgd2FzIGdpdmVuLicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IF8uZ2V0TmFtZShjb25zdHJ1Y3Rvcik7XG4gICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgIG5hbWUgPSAnYW4gdW5uYW1lZCBjb25zdHJ1Y3Rvcic7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGlzSW5zdGFuY2VPZlxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAnICsgbmFtZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgJyArIG5hbWVcbiAgICApO1xuICB9O1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2luc3RhbmNlb2YnLCBhc3NlcnRJbnN0YW5jZU9mKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5zdGFuY2VPZicsIGFzc2VydEluc3RhbmNlT2YpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5KG5hbWVbLCB2YWxbLCBtc2ddXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnKTtcbiAgICpcbiAgICogV2hlbiBgdmFsYCBpcyBwcm92aWRlZCwgYC5wcm9wZXJ0eWAgYWxzbyBhc3NlcnRzIHRoYXQgdGhlIHByb3BlcnR5J3MgdmFsdWVcbiAgICogaXMgZXF1YWwgdG8gdGhlIGdpdmVuIGB2YWxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYScsIDEpO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eSBpcyB1c2VkLiBBZGQgYC5kZWVwYCBlYXJsaWVyIGluIHRoZVxuICAgKiBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWUgdGhlIGBkZWVwLWVxbGAgcHJvamVjdCBwYWdlIGZvclxuICAgKiBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMgcHJvcGVydHkgYHg6IHthOiAxfWBcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uaGF2ZS5kZWVwLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8ubm90LmhhdmUucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKlxuICAgKiBUaGUgdGFyZ2V0J3MgZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhcmUgYWx3YXlzIGluY2x1ZGVkXG4gICAqIGluIHRoZSBzZWFyY2guIEJ5IGRlZmF1bHQsIGJvdGggb3duIGFuZCBpbmhlcml0ZWQgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQuXG4gICAqIEFkZCBgLm93bmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZXhjbHVkZSBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIHRoZVxuICAgKiBzZWFyY2guXG4gICAqXG4gICAqICAgICBPYmplY3QucHJvdG90eXBlLmIgPSAyO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd24ucHJvcGVydHkoJ2EnKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duLnByb3BlcnR5KCdhJywgMSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogYC5kZWVwYCBhbmQgYC5vd25gIGNhbiBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIEFkZCBgLm5lc3RlZGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZW5hYmxlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gd2hlblxuICAgKiByZWZlcmVuY2luZyBuZXN0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ2EuYlsxXScpO1xuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzFdJywgJ3knKTtcbiAgICpcbiAgICogSWYgYC5gIG9yIGBbXWAgYXJlIHBhcnQgb2YgYW4gYWN0dWFsIHByb3BlcnR5IG5hbWUsIHRoZXkgY2FuIGJlIGVzY2FwZWQgYnlcbiAgICogYWRkaW5nIHR3byBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlbS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7Jy5hJzogeydbYl0nOiAneCd9fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ1xcXFwuYS5cXFxcW2JcXFxcXScpO1xuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm5lc3RlZGAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogW3tjOiAzfV19fSlcbiAgICogICAgICAgLnRvLmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkoJ2EuYlswXScsIHtjOiAzfSk7XG4gICAqXG4gICAqIGAub3duYCBhbmQgYC5uZXN0ZWRgIGNhbm5vdCBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5wcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5wcm9wZXJ0eWAgd2hlbiBwcm92aWRpbmcgYHZhbGAuIFRoZVxuICAgKiBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIGtleSBgbmFtZWAsIG9yIHRoYXQgaXRcbiAgICogZG9lcyBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCBidXQgaXRzIHZhbHVlIGlzbid0IGVxdWFsIHRvXG4gICAqIHRoZSBnaXZlbiBgdmFsYC4gSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzXG4gICAqIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpc24ndCBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5XG4gICAqIGBuYW1lYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHtiOiAyfSkudG8ubm90LmhhdmUucHJvcGVydHkoJ2EnLCAxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCxcbiAgICogaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSBwcm9wZXJ0eSBoYXMgaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXJcbiAgICogdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDN9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDN9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScsIDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5wcm9wZXJ0eWAgY2hhbmdlcyB0aGUgdGFyZ2V0IG9mIGFueSBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpblxuICAgKiB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlIG9yaWdpbmFsIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJykudGhhdC5pcy5hKCdudW1iZXInKTtcbiAgICpcbiAgICogYC5wcm9wZXJ0eWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgYHZhbGAsIG9ubHkgdXNlIHRoZVxuICAgKiBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAyKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2InLCB1bmRlZmluZWQsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogVGhlIGFib3ZlIGFzc2VydGlvbiBpc24ndCB0aGUgc2FtZSB0aGluZyBhcyBub3QgcHJvdmlkaW5nIGB2YWxgLiBJbnN0ZWFkLFxuICAgKiBpdCdzIGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQgb2JqZWN0IGhhcyBhIGBiYCBwcm9wZXJ0eSB0aGF0J3MgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqIFRoZSBhc3NlcnRpb25zIGAub3duUHJvcGVydHlgIGFuZCBgLmhhdmVPd25Qcm9wZXJ0eWAgY2FuIGJlIHVzZWRcbiAgICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5vd24ucHJvcGVydHlgLlxuICAgKlxuICAgKiBAbmFtZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWwgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQHJldHVybnMgdmFsdWUgb2YgcHJvcGVydHkgZm9yIGNoYWluaW5nXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydFByb3BlcnR5IChuYW1lLCB2YWwsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuXG4gICAgdmFyIGlzTmVzdGVkID0gZmxhZyh0aGlzLCAnbmVzdGVkJylcbiAgICAgICwgaXNPd24gPSBmbGFnKHRoaXMsICdvd24nKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcblxuICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcblxuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgaWYgKG5hbWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIG5lc3RlZCBzeW50YXgnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuYW1lVHlwZSAhPT0gJ3N0cmluZycgJiYgbmFtZVR5cGUgIT09ICdudW1iZXInICYmIG5hbWVUeXBlICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2wnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTmVzdGVkICYmIGlzT3duKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyAnVGhlIFwibmVzdGVkXCIgYW5kIFwib3duXCIgZmxhZ3MgY2Fubm90IGJlIGNvbWJpbmVkLicsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyAnVGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBuZWdhdGUgPSBmbGFnKHRoaXMsICduZWdhdGUnKVxuICAgICAgLCBwYXRoSW5mbyA9IGlzTmVzdGVkID8gXy5nZXRQYXRoSW5mbyhvYmosIG5hbWUpIDogbnVsbFxuICAgICAgLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV1cbiAgICAgICwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnKHRoaXMsICdlcWwnKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyOztcblxuICAgIHZhciBkZXNjcmlwdG9yID0gJyc7XG4gICAgaWYgKGlzRGVlcCkgZGVzY3JpcHRvciArPSAnZGVlcCAnO1xuICAgIGlmIChpc093bikgZGVzY3JpcHRvciArPSAnb3duICc7XG4gICAgaWYgKGlzTmVzdGVkKSBkZXNjcmlwdG9yICs9ICduZXN0ZWQgJztcbiAgICBkZXNjcmlwdG9yICs9ICdwcm9wZXJ0eSAnO1xuXG4gICAgdmFyIGhhc1Byb3BlcnR5O1xuICAgIGlmIChpc093bikgaGFzUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgICBlbHNlIGlmIChpc05lc3RlZCkgaGFzUHJvcGVydHkgPSBwYXRoSW5mby5leGlzdHM7XG4gICAgZWxzZSBoYXNQcm9wZXJ0eSA9IF8uaGFzUHJvcGVydHkob2JqLCBuYW1lKTtcblxuICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIG5lZ2F0ZWQgYXNzZXJ0aW9uIGZvciBib3RoIG5hbWUgYW5kIHZhbCwgbWVyZWx5IGhhdmluZ1xuICAgIC8vIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc24ndCBlbm91Z2ggdG8gY2F1c2UgdGhlIGFzc2VydGlvbiB0b1xuICAgIC8vIGZhaWwuIEl0IG11c3QgYm90aCBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoYXQgcHJvcGVydHkgbXVzdCBlcXVhbCB0aGUgZ2l2ZW4gdmFsLiBUaGVyZWZvcmUsIHNraXAgdGhpcyBhc3NlcnRpb24gaW5cbiAgICAvLyBmYXZvciBvZiB0aGUgbmV4dC5cbiAgICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eSAmJiBpc0VxbCh2YWwsIHZhbHVlKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7YWN0fSdcbiAgICAgICAgLCB2YWxcbiAgICAgICAgLCB2YWx1ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCB2YWx1ZSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdwcm9wZXJ0eScsIGFzc2VydFByb3BlcnR5KTtcblxuICBmdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eSAobmFtZSwgdmFsdWUsIG1zZykge1xuICAgIGZsYWcodGhpcywgJ293bicsIHRydWUpO1xuICAgIGFzc2VydFByb3BlcnR5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvd25Qcm9wZXJ0eScsIGFzc2VydE93blByb3BlcnR5KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaGF2ZU93blByb3BlcnR5JywgYXNzZXJ0T3duUHJvcGVydHkpO1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5RGVzY3JpcHRvcihuYW1lWywgZGVzY3JpcHRvclssIG1zZ11dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgaXRzIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGtleVxuICAgKiBgbmFtZWAuIEVudW1lcmFibGUgYW5kIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIGluIHRoZVxuICAgKiBzZWFyY2guXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiBXaGVuIGBkZXNjcmlwdG9yYCBpcyBwcm92aWRlZCwgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGFsc28gYXNzZXJ0cyB0aGF0XG4gICAqIHRoZSBwcm9wZXJ0eSdzIGRlc2NyaXB0b3IgaXMgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgZGVzY3JpcHRvcmAuIFNlZVxuICAgKiB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub3duUHJvcGVydHlEZXNjcmlwdG9yYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIHdoZW4gcHJvdmlkaW5nXG4gICAqIGEgYGRlc2NyaXB0b3JgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieVxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0IGVpdGhlciBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGhcbiAgICogdGhlIGdpdmVuIGtleSBgbmFtZWAsIG9yIHRoYXQgaXQgZG9lcyBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgKiBnaXZlbiBrZXkgYG5hbWVgIGJ1dCBpdFx1MjAxOXMgbm90IGRlZXBseSBlcXVhbCB0byB0aGUgZ2l2ZW4gYGRlc2NyaXB0b3JgLiBJdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuXG4gICAqIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuXG4gICAqIGtleSBgbmFtZWAsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlblxuICAgKiBrZXkgYG5hbWVgLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHByb3BlcnR5IGhhcyBpdHMgZXhwZWN0ZWRcbiAgICogZGVzY3JpcHRvciwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIG9uZSBvZiBtYW55XG4gICAqIHVuZXhwZWN0ZWQgZGVzY3JpcHRvcnMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAzfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAzLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDEsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGNoYW5nZXMgdGhlIHRhcmdldCBvZiBhbnkgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvd1xuICAgKiBpbiB0aGUgY2hhaW4gdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZyb20gdGhlIG9yaWdpbmFsXG4gICAqIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpXG4gICAqICAgICAgIC50aGF0Lmhhcy5wcm9wZXJ0eSgnZW51bWVyYWJsZScsIHRydWUpO1xuICAgKlxuICAgKiBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhXG4gICAqIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzb1xuICAgKiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmdcbiAgICogYGRlc2NyaXB0b3JgLCBvbmx5IHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAyLFxuICAgKiAgICAgfSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDIsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSlcbiAgICogICAgICAgLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdiJywgdW5kZWZpbmVkLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqIFRoZSBhYm92ZSBhc3NlcnRpb24gaXNuJ3QgdGhlIHNhbWUgdGhpbmcgYXMgbm90IHByb3ZpZGluZyBgZGVzY3JpcHRvcmAuXG4gICAqIEluc3RlYWQsIGl0J3MgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBvYmplY3QgaGFzIGEgYGJgIHByb3BlcnR5XG4gICAqIGRlc2NyaXB0b3IgdGhhdCdzIGRlZXBseSBlcXVhbCB0byBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhlIGFsaWFzIGAuaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvcmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgLlxuICAgKlxuICAgKiBAbmFtZSBvd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQGFsaWFzIGhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yIChuYW1lLCBkZXNjcmlwdG9yLCBtc2cpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgICAgZGVzY3JpcHRvciA9IG51bGw7XG4gICAgfVxuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB2YXIgYWN0dWFsRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0KG9iaiksIG5hbWUpO1xuICAgIHZhciBlcWwgPSBmbGFnKHRoaXMsICdlcWwnKTtcbiAgICBpZiAoYWN0dWFsRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBlcWwoZGVzY3JpcHRvciwgYWN0dWFsRGVzY3JpcHRvcilcbiAgICAgICAgLCAnZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpICsgJyBvbiAje3RoaXN9IHRvIG1hdGNoICcgKyBfLmluc3BlY3QoZGVzY3JpcHRvcikgKyAnLCBnb3QgJyArIF8uaW5zcGVjdChhY3R1YWxEZXNjcmlwdG9yKVxuICAgICAgICAsICdleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9uICN7dGhpc30gdG8gbm90IG1hdGNoICcgKyBfLmluc3BlY3QoZGVzY3JpcHRvcilcbiAgICAgICAgLCBkZXNjcmlwdG9yXG4gICAgICAgICwgYWN0dWFsRGVzY3JpcHRvclxuICAgICAgICAsIHRydWVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGFjdHVhbERlc2NyaXB0b3JcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbERlc2NyaXB0b3IpO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnb3duUHJvcGVydHlEZXNjcmlwdG9yJywgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvcicsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5cbiAgLyoqXG4gICAqICMjIyAubGVuZ3RoT2YoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgb3IgYHNpemVgIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXJcbiAgICogYG5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFsxLCAyLCAzXSkpLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqICAgICBleHBlY3QobmV3IE1hcChbWydhJywgMV0sIFsnYicsIDJdLCBbJ2MnLCAzXV0pKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmxlbmd0aE9mYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBwcm9wZXJ0eSBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUsIHJhdGhlciB0aGFuIG5vdCBlcXVhbCB0byBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmhhdmUubGVuZ3RoT2YoNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmxlbmd0aE9mYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDIsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLmxlbmd0aE9mKDIpO1xuICAgKlxuICAgKiBgLmxlbmd0aE9mYCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgbGFuZ3VhZ2UgY2hhaW4sIGNhdXNpbmcgYWxsIGAuYWJvdmVgLFxuICAgKiBgLmJlbG93YCwgYC5sZWFzdGAsIGAubW9zdGAsIGFuZCBgLndpdGhpbmAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGVcbiAgICogY2hhaW4gdG8gdXNlIHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBwcm9wZXJ0eSBhcyB0aGUgdGFyZ2V0LiBIb3dldmVyLCBpdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgIHByb3BlcnR5IGlzIGVxdWFsIHRvIGl0c1xuICAgKiBleHBlY3RlZCBsZW5ndGgsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0cyBgbGVuZ3RoYCBwcm9wZXJ0eSBmYWxsc1xuICAgKiB3aXRoaW4gc29tZSByYW5nZSBvZiB2YWx1ZXMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDMpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDMpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi53aXRoaW4oMiw0KTtcbiAgICpcbiAgICogRHVlIHRvIGEgY29tcGF0aWJpbGl0eSBpc3N1ZSwgdGhlIGFsaWFzIGAubGVuZ3RoYCBjYW4ndCBiZSBjaGFpbmVkIGRpcmVjdGx5XG4gICAqIG9mZiBvZiBhbiB1bmludm9rZWQgbWV0aG9kIHN1Y2ggYXMgYC5hYC4gVGhlcmVmb3JlLCBgLmxlbmd0aGAgY2FuJ3QgYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmxlbmd0aE9mYCBpbiBldmVyeSBzaXR1YXRpb24uIEl0J3MgcmVjb21tZW5kZWQgdG9cbiAgICogYWx3YXlzIHVzZSBgLmxlbmd0aE9mYCBpbnN0ZWFkIG9mIGAubGVuZ3RoYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUuYS5sZW5ndGgoMyk7IC8vIGluY29tcGF0aWJsZTsgdGhyb3dzIGVycm9yXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmEubGVuZ3RoT2YoMyk7ICAvLyBwYXNzZXMgYXMgZXhwZWN0ZWRcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQGFsaWFzIGxlbmd0aFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoQ2hhaW4gKCkge1xuICAgIGZsYWcodGhpcywgJ2RvTGVuZ3RoJywgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRMZW5ndGggKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAsIGl0ZW1zQ291bnQ7XG5cbiAgICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICBjYXNlICdzZXQnOlxuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXRlbXNDb3VudCA9PSBuXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBvZiAje2FjdH0nXG4gICAgICAsIG5cbiAgICAgICwgaXRlbXNDb3VudFxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnbGVuZ3RoT2YnLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcblxuICAvKipcbiAgICogIyMjIC5tYXRjaChyZVssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IG1hdGNoZXMgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBgcmVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5tYXRjaCgvXmZvby8pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm1hdGNoYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubm90Lm1hdGNoKC90YWNvLyk7XG4gICAqXG4gICAqIGAubWF0Y2hgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubWF0Y2goL3RhY28vLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicsICdub29vIHdoeSBmYWlsPz8nKS50by5tYXRjaCgvdGFjby8pO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5tYXRjaGVzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLm1hdGNoYC5cbiAgICpcbiAgICogQG5hbWUgbWF0Y2hcbiAgICogQGFsaWFzIG1hdGNoZXNcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cbiAgZnVuY3Rpb24gYXNzZXJ0TWF0Y2gocmUsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgcmUuZXhlYyhvYmopXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoICcgKyByZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gbWF0Y2ggJyArIHJlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ21hdGNoJywgYXNzZXJ0TWF0Y2gpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtYXRjaGVzJywgYXNzZXJ0TWF0Y2gpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnN0cmluZyhzdHJbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBzdHJpbmcgY29udGFpbnMgdGhlIGdpdmVuIHN1YnN0cmluZyBgc3RyYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8uaGF2ZS5zdHJpbmcoJ2JhcicpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnN0cmluZ2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLm5vdC5oYXZlLnN0cmluZygndGFjbycpO1xuICAgKlxuICAgKiBgLnN0cmluZ2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5oYXZlLnN0cmluZygndGFjbycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUuc3RyaW5nKCd0YWNvJyk7XG4gICAqXG4gICAqIEBuYW1lIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzdHJpbmcnLCBmdW5jdGlvbiAoc3RyLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdzdHJpbmcnKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB+b2JqLmluZGV4T2Yoc3RyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluICcgKyBfLmluc3BlY3Qoc3RyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiAnICsgXy5pbnNwZWN0KHN0cilcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5rZXlzKGtleTFbLCBrZXkyWywgLi4uXV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IG9iamVjdCwgYXJyYXksIG1hcCwgb3Igc2V0IGhhcyB0aGUgZ2l2ZW4ga2V5cy4gT25seVxuICAgKiB0aGUgdGFyZ2V0J3Mgb3duIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoLlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYW4gb2JqZWN0IG9yIGFycmF5LCBrZXlzIGNhbiBiZSBwcm92aWRlZCBhcyBvbmUgb3IgbW9yZVxuICAgKiBzdHJpbmcgYXJndW1lbnRzLCBhIHNpbmdsZSBhcnJheSBhcmd1bWVudCwgb3IgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBJblxuICAgKiB0aGUgbGF0dGVyIGNhc2UsIG9ubHkgdGhlIGtleXMgaW4gdGhlIGdpdmVuIG9iamVjdCBtYXR0ZXI7IHRoZSB2YWx1ZXMgYXJlXG4gICAqIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdChbJ3gnLCAneSddKS50by5oYXZlLmFsbC5rZXlzKDAsIDEpO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cyhbJ2EnLCAnYiddKTtcbiAgICogICAgIGV4cGVjdChbJ3gnLCAneSddKS50by5oYXZlLmFsbC5rZXlzKFswLCAxXSk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKHthOiA0LCBiOiA1fSk7IC8vIGlnbm9yZSA0IGFuZCA1XG4gICAqICAgICBleHBlY3QoWyd4JywgJ3knXSkudG8uaGF2ZS5hbGwua2V5cyh7MDogNCwgMTogNX0pOyAvLyBpZ25vcmUgNCBhbmQgNVxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBtYXAgb3Igc2V0LCBlYWNoIGtleSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgc2VwYXJhdGVcbiAgICogYXJndW1lbnQuXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IE1hcChbWydhJywgMV0sIFsnYicsIDJdXSkpLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWydhJywgJ2InXSkpLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBCZWNhdXNlIGAua2V5c2AgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLCBpdCdzXG4gICAqIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgdXNpbmcgYC5rZXlzYC4gU2VlIHRoZSBgLmFgIGRvY1xuICAgKiBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmJlLmFuKCdvYmplY3QnKS50aGF0Lmhhcy5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBrZXlzIG9mIG1hcHMgYW5kXG4gICAqIHNldHMuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZVxuICAgKiB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IHNldCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBrZXkgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8uaGF2ZS5hbGwuZGVlcC5rZXlzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8ubm90LmhhdmUuYWxsLmtleXMoW3thOiAxfV0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG11c3QgaGF2ZSBhbGwgb2YgdGhlIGdpdmVuIGtleXMgYW5kIG5vIG1vcmUuIEFkZFxuICAgKiBgLmFueWAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gb25seSByZXF1aXJlIHRoYXQgdGhlIHRhcmdldCBoYXZlIGF0IGxlYXN0XG4gICAqIG9uZSBvZiB0aGUgZ2l2ZW4ga2V5cy4gQWxzbywgYWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGVcbiAgICogYC5rZXlzYC4gSXQncyBvZnRlbiBiZXN0IHRvIGFkZCBgLmFueWAgd2hlbiBuZWdhdGluZyBgLmtleXNgLCBhbmQgdG8gdXNlXG4gICAqIGAuYWxsYCB3aGVuIGFzc2VydGluZyBgLmtleXNgIHdpdGhvdXQgbmVnYXRpb24uXG4gICAqXG4gICAqIFdoZW4gbmVnYXRpbmcgYC5rZXlzYCwgYC5hbnlgIGlzIHByZWZlcnJlZCBiZWNhdXNlIGAubm90LmFueS5rZXlzYCBhc3NlcnRzXG4gICAqIGV4YWN0bHkgd2hhdCdzIGV4cGVjdGVkIG9mIHRoZSBvdXRwdXQsIHdoZXJlYXMgYC5ub3QuYWxsLmtleXNgIGNyZWF0ZXNcbiAgICogdW5jZXJ0YWluIGV4cGVjdGF0aW9ucy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbnkgb2YgdGhlIGdpdmVuIGtleXNcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZDsgYXNzZXJ0cyB0aGF0IHRhcmdldCBkb2Vzbid0IGhhdmUgYWxsIG9mIHRoZSBnaXZlblxuICAgKiAgICAgLy8ga2V5cyBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBzb21lIG9mIHRoZW1cbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFsbC5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogV2hlbiBhc3NlcnRpbmcgYC5rZXlzYCB3aXRob3V0IG5lZ2F0aW9uLCBgLmFsbGAgaXMgcHJlZmVycmVkIGJlY2F1c2VcbiAgICogYC5hbGwua2V5c2AgYXNzZXJ0cyBleGFjdGx5IHdoYXQncyBleHBlY3RlZCBvZiB0aGUgb3V0cHV0LCB3aGVyZWFzXG4gICAqIGAuYW55LmtleXNgIGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGhhcyBhbGwgdGhlIGdpdmVuIGtleXNcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuXG4gICAqICAgICAvLyBrZXlzIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIG1vcmUgb2YgdGhlbVxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBgLmFsbGAgaXMgdXNlZCBieSBkZWZhdWx0IHdoZW4gbmVpdGhlciBgLmFsbGAgbm9yIGAuYW55YCBhcHBlYXJcbiAgICogZWFybGllciBpbiB0aGUgY2hhaW4uIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhZGQgYC5hbGxgIGFueXdheSBiZWNhdXNlXG4gICAqIGl0IGltcHJvdmVzIHJlYWRhYmlsaXR5LlxuICAgKlxuICAgKiAgICAgLy8gQm90aCBhc3NlcnRpb25zIGFyZSBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5rZXlzKCdhJywgJ2InKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmluY2x1ZGVgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdCB0aGUgdGFyZ2V0J3Mga2V5cyBiZSBhXG4gICAqIHN1cGVyc2V0IG9mIHRoZSBleHBlY3RlZCBrZXlzLCByYXRoZXIgdGhhbiBpZGVudGljYWwgc2V0cy5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QncyBrZXlzIGFyZSBhIHN1cGVyc2V0IG9mIFsnYScsICdiJ10gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8ubm90LmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpZiBgLmFueWAgYW5kIGAuaW5jbHVkZWAgYXJlIGNvbWJpbmVkLCBvbmx5IHRoZSBgLmFueWAgdGFrZXNcbiAgICogZWZmZWN0LiBUaGUgYC5pbmNsdWRlYCBpcyBpZ25vcmVkIGluIHRoaXMgY2FzZS5cbiAgICpcbiAgICogICAgIC8vIEJvdGggYXNzZXJ0aW9ucyBhcmUgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmluY2x1ZGUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUua2V5KCdiJyk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmtleWAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5rZXlzYC5cbiAgICpcbiAgICogQG5hbWUga2V5c1xuICAgKiBAYWxpYXMga2V5XG4gICAqIEBwYXJhbSB7Li4uU3RyaW5nfEFycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRLZXlzIChrZXlzKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKVxuICAgICAgLCBrZXlzVHlwZSA9IF8udHlwZShrZXlzKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBzdHJcbiAgICAgICwgZGVlcFN0ciA9ICcnXG4gICAgICAsIGFjdHVhbFxuICAgICAgLCBvayA9IHRydWVcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKTtcblxuICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcbiAgICB2YXIgbWl4ZWRBcmdzTXNnID0gZmxhZ01zZyArICd3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50cyc7XG5cbiAgICBpZiAob2JqVHlwZSA9PT0gJ01hcCcgfHwgb2JqVHlwZSA9PT0gJ1NldCcpIHtcbiAgICAgIGRlZXBTdHIgPSBpc0RlZXAgPyAnZGVlcGx5ICcgOiAnJztcbiAgICAgIGFjdHVhbCA9IFtdO1xuXG4gICAgICAvLyBNYXAgYW5kIFNldCAnLmtleXMnIGFyZW4ndCBzdXBwb3J0ZWQgaW4gSUUgMTEuIFRoZXJlZm9yZSwgdXNlIC5mb3JFYWNoLlxuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKHZhbCwga2V5KSB7IGFjdHVhbC5wdXNoKGtleSkgfSk7XG5cbiAgICAgIGlmIChrZXlzVHlwZSAhPT0gJ0FycmF5Jykge1xuICAgICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsID0gXy5nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopO1xuXG4gICAgICBzd2l0Y2ggKGtleXNUeXBlKSB7XG4gICAgICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdPYmplY3QnOlxuICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHN0cmluZ2lmeSBub24tU3ltYm9scyBiZWNhdXNlIFN5bWJvbHMgd291bGQgYmVjb21lIFwiU3ltYm9sKClcIlxuICAgICAga2V5cyA9IGtleXMubWFwKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzeW1ib2wnID8gdmFsIDogU3RyaW5nKHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArICdrZXlzIHJlcXVpcmVkJywgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICB2YXIgbGVuID0ga2V5cy5sZW5ndGhcbiAgICAgICwgYW55ID0gZmxhZyh0aGlzLCAnYW55JylcbiAgICAgICwgYWxsID0gZmxhZyh0aGlzLCAnYWxsJylcbiAgICAgICwgZXhwZWN0ZWQgPSBrZXlzXG4gICAgICAsIGlzRXFsID0gaXNEZWVwID8gZmxhZyh0aGlzLCAnZXFsJykgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcblxuICAgIGlmICghYW55ICYmICFhbGwpIHtcbiAgICAgIGFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSGFzIGFueVxuICAgIGlmIChhbnkpIHtcbiAgICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGV4cGVjdGVkS2V5LCBhY3R1YWxLZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhcyBhbGxcbiAgICBpZiAoYWxsKSB7XG4gICAgICBvayA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICAgIHJldHVybiBhY3R1YWwuc29tZShmdW5jdGlvbihhY3R1YWxLZXkpIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZmxhZyh0aGlzLCAnY29udGFpbnMnKSkge1xuICAgICAgICBvayA9IG9rICYmIGtleXMubGVuZ3RoID09IGFjdHVhbC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gS2V5IHN0cmluZ1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBfLmluc3BlY3Qoa2V5KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGxhc3QgPSBrZXlzLnBvcCgpO1xuICAgICAgaWYgKGFsbCkge1xuICAgICAgICBzdHIgPSBrZXlzLmpvaW4oJywgJykgKyAnLCBhbmQgJyArIGxhc3Q7XG4gICAgICB9XG4gICAgICBpZiAoYW55KSB7XG4gICAgICAgIHN0ciA9IGtleXMuam9pbignLCAnKSArICcsIG9yICcgKyBsYXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBfLmluc3BlY3Qoa2V5c1swXSk7XG4gICAgfVxuXG4gICAgLy8gRm9ybVxuICAgIHN0ciA9IChsZW4gPiAxID8gJ2tleXMgJyA6ICdrZXkgJykgKyBzdHI7XG5cbiAgICAvLyBIYXZlIC8gaW5jbHVkZVxuICAgIHN0ciA9IChmbGFnKHRoaXMsICdjb250YWlucycpID8gJ2NvbnRhaW4gJyA6ICdoYXZlICcpICsgc3RyO1xuXG4gICAgLy8gQXNzZXJ0aW9uXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG9rXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvICcgKyBkZWVwU3RyICsgc3RyXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCAnICsgZGVlcFN0ciArIHN0clxuICAgICAgLCBleHBlY3RlZC5zbGljZSgwKS5zb3J0KF8uY29tcGFyZUJ5SW5zcGVjdClcbiAgICAgICwgYWN0dWFsLnNvcnQoXy5jb21wYXJlQnlJbnNwZWN0KVxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2tleXMnLCBhc3NlcnRLZXlzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgna2V5JywgYXNzZXJ0S2V5cyk7XG5cbiAgLyoqXG4gICAqICMjIyAudGhyb3coW2Vycm9yTGlrZV0sIFtlcnJNc2dNYXRjaGVyXSwgW21zZ10pXG4gICAqXG4gICAqIFdoZW4gbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYC50aHJvd2AgaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZFxuICAgKiBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coKTtcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGFuZCBpdCdzIGFuIGVycm9yIGNvbnN0cnVjdG9yLCBgLnRocm93YFxuICAgKiBpbnZva2VzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gdGhhdCdzIGFuXG4gICAqIGluc3RhbmNlIG9mIHRoYXQgZXJyb3IgY29uc3RydWN0b3IuXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYW5kIGl0J3MgYW4gZXJyb3IgaW5zdGFuY2UsIGAudGhyb3dgIGludm9rZXNcbiAgICogdGhlIHRhcmdldCBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB0aGF0J3Mgc3RyaWN0bHlcbiAgICogKGA9PT1gKSBlcXVhbCB0byB0aGF0IGVycm9yIGluc3RhbmNlLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpO1xuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KGVycik7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhIHN0cmluZywgYC50aHJvd2AgaW52b2tlcyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHdpdGggYSBtZXNzYWdlIHRoYXRcbiAgICogY29udGFpbnMgdGhhdCBzdHJpbmcuXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdygnc2FsbW9uJyk7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYC50aHJvd2BcbiAgICogaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHdpdGggYVxuICAgKiBtZXNzYWdlIHRoYXQgbWF0Y2hlcyB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KC9zYWxtb24vKTtcbiAgICpcbiAgICogV2hlbiB0d28gYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYW5kIHRoZSBmaXJzdCBpcyBhbiBlcnJvciBpbnN0YW5jZSBvclxuICAgKiBjb25zdHJ1Y3RvciwgYW5kIHRoZSBzZWNvbmQgaXMgYSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uLCBgLnRocm93YFxuICAgKiBpbnZva2VzIHRoZSBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB0aGF0IGZ1bGZpbGxzIGJvdGhcbiAgICogY29uZGl0aW9ucyBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAqXG4gICAqICAgICB2YXIgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7XG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yLCAnc2FsbW9uJyk7XG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvciwgL3NhbG1vbi8pO1xuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhlcnIsICdzYWxtb24nKTtcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coZXJyLCAvc2FsbW9uLyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAudGhyb3dgLlxuICAgKlxuICAgKiAgICAgdmFyIGdvb2RGbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8ubm90LnRocm93KCk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLnRocm93YCB3aGVuIHByb3ZpZGluZyBhbnkgYXJndW1lbnRzLlxuICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGVpdGhlciBkb2Vzbid0IHRocm93IGFuIGVycm9yLCBvciB0aGF0IGl0IHRocm93cyBhbiBlcnJvciBidXQgb2YgYVxuICAgKiBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBnaXZlbiB0eXBlLCBvciB0aGF0IGl0IHRocm93cyBhbiBlcnJvciBvZiB0aGUgZ2l2ZW5cbiAgICogdHlwZSBidXQgd2l0aCBhIG1lc3NhZ2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgdGhlIGdpdmVuIHN0cmluZy4gSXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhblxuICAgKiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpc24ndCBleHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgZ29vZEZuID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoZ29vZEZuKS50by5ub3QudGhyb3coKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLm5vdC50aHJvdyhSZWZlcmVuY2VFcnJvciwgJ3gnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiB0aGF0IHRoZSBlcnJvciBpcyBvZiBpdHMgZXhwZWN0ZWQgdHlwZSwgYW5kIGhhcyBhIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcyBhblxuICAgKiBleHBlY3RlZCBzdHJpbmcsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueVxuICAgKiB1bmV4cGVjdGVkIHR5cGVzLCBhbmQgZG9lc24ndCBoYXZlIGEgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIHNvbWUgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yLCAnc2FsbW9uJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLm5vdC50aHJvdyhSZWZlcmVuY2VFcnJvciwgJ3gnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAudGhyb3dgIGNoYW5nZXMgdGhlIHRhcmdldCBvZiBhbnkgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG9cbiAgICogYmUgdGhlIGVycm9yIG9iamVjdCB0aGF0J3MgdGhyb3duLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpO1xuICAgKiAgICAgZXJyLmNvZGUgPSA0MjtcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IpLndpdGgucHJvcGVydHkoJ2NvZGUnLCA0Mik7XG4gICAqXG4gICAqIGAudGhyb3dgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC4gV2hlbiBub3QgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIGFsd2F5cyB1c2VcbiAgICogdGhlIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgdmFyIGdvb2RGbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8udGhyb3coVHlwZUVycm9yLCAneCcsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChnb29kRm4sICdub29vIHdoeSBmYWlsPz8nKS50by50aHJvdygpO1xuICAgKlxuICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgaW4gRVM1LCBgLnRocm93YCBtYXkgbm90IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkIHdoZW5cbiAgICogdXNpbmcgYSB0cmFuc3BpbGVyIHN1Y2ggYXMgQmFiZWwgb3IgVHlwZVNjcmlwdC4gSW4gcGFydGljdWxhciwgaXQgbWF5XG4gICAqIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIHdoZW4gc3ViY2xhc3NpbmcgdGhlIGJ1aWx0LWluIGBFcnJvcmAgb2JqZWN0IGFuZFxuICAgKiB0aGVuIHBhc3NpbmcgdGhlIHN1YmNsYXNzZWQgY29uc3RydWN0b3IgdG8gYC50aHJvd2AuIFNlZSB5b3VyIHRyYW5zcGlsZXInc1xuICAgKiBkb2NzIGZvciBkZXRhaWxzOlxuICAgKlxuICAgKiAtIChbQmFiZWxdKGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL3VzYWdlL2NhdmVhdHMvI2NsYXNzZXMpKVxuICAgKiAtIChbVHlwZVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmspKVxuICAgKlxuICAgKiBCZXdhcmUgb2Ygc29tZSBjb21tb24gbWlzdGFrZXMgd2hlbiB1c2luZyB0aGUgYHRocm93YCBhc3NlcnRpb24uIE9uZSBjb21tb25cbiAgICogbWlzdGFrZSBpcyB0byBhY2NpZGVudGFsbHkgaW52b2tlIHRoZSBmdW5jdGlvbiB5b3Vyc2VsZiBpbnN0ZWFkIG9mIGxldHRpbmdcbiAgICogdGhlIGB0aHJvd2AgYXNzZXJ0aW9uIGludm9rZSB0aGUgZnVuY3Rpb24gZm9yIHlvdS4gRm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdGVzdGluZyBpZiBhIGZ1bmN0aW9uIG5hbWVkIGBmbmAgdGhyb3dzLCBwcm92aWRlIGBmbmAgaW5zdGVhZCBvZiBgZm4oKWAgYXNcbiAgICogdGhlIHRhcmdldCBmb3IgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogICAgIGV4cGVjdChmbikudG8udGhyb3coKTsgICAgIC8vIEdvb2QhIFRlc3RzIGBmbmAgYXMgZGVzaXJlZFxuICAgKiAgICAgZXhwZWN0KGZuKCkpLnRvLnRocm93KCk7ICAgLy8gQmFkISBUZXN0cyByZXN1bHQgb2YgYGZuKClgLCBub3QgYGZuYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0byBhc3NlcnQgdGhhdCB5b3VyIGZ1bmN0aW9uIGBmbmAgdGhyb3dzIHdoZW4gcGFzc2VkIGNlcnRhaW5cbiAgICogYXJndW1lbnRzLCB0aGVuIHdyYXAgYSBjYWxsIHRvIGBmbmAgaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBleHBlY3QoZnVuY3Rpb24gKCkgeyBmbig0Mik7IH0pLnRvLnRocm93KCk7ICAvLyBGdW5jdGlvbiBleHByZXNzaW9uXG4gICAqICAgICBleHBlY3QoKCkgPT4gZm4oNDIpKS50by50aHJvdygpOyAgICAgICAgICAgICAvLyBFUzYgYXJyb3cgZnVuY3Rpb25cbiAgICpcbiAgICogQW5vdGhlciBjb21tb24gbWlzdGFrZSBpcyB0byBwcm92aWRlIGFuIG9iamVjdCBtZXRob2QgKG9yIGFueSBzdGFuZC1hbG9uZVxuICAgKiBmdW5jdGlvbiB0aGF0IHJlbGllcyBvbiBgdGhpc2ApIGFzIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRG9pbmcgc28gaXNcbiAgICogcHJvYmxlbWF0aWMgYmVjYXVzZSB0aGUgYHRoaXNgIGNvbnRleHQgd2lsbCBiZSBsb3N0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGludm9rZWQgYnkgYC50aHJvd2A7IHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBrbm93IHdoYXQgYHRoaXNgIGlzIHN1cHBvc2VkXG4gICAqIHRvIGJlLiBUaGVyZSBhcmUgdHdvIHdheXMgYXJvdW5kIHRoaXMgcHJvYmxlbS4gT25lIHNvbHV0aW9uIGlzIHRvIHdyYXAgdGhlXG4gICAqIG1ldGhvZCBvciBmdW5jdGlvbiBjYWxsIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uLiBBbm90aGVyIHNvbHV0aW9uIGlzIHRvXG4gICAqIHVzZSBgYmluZGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZnVuY3Rpb24gKCkgeyBjYXQubWVvdygpOyB9KS50by50aHJvdygpOyAgLy8gRnVuY3Rpb24gZXhwcmVzc2lvblxuICAgKiAgICAgZXhwZWN0KCgpID0+IGNhdC5tZW93KCkpLnRvLnRocm93KCk7ICAgICAgICAgICAgIC8vIEVTNiBhcnJvdyBmdW5jdGlvblxuICAgKiAgICAgZXhwZWN0KGNhdC5tZW93LmJpbmQoY2F0KSkudG8udGhyb3coKTsgICAgICAgICAgIC8vIEJpbmRcbiAgICpcbiAgICogRmluYWxseSwgaXQncyB3b3J0aCBtZW50aW9uaW5nIHRoYXQgaXQncyBhIGJlc3QgcHJhY3RpY2UgaW4gSmF2YVNjcmlwdCB0b1xuICAgKiBvbmx5IHRocm93IGBFcnJvcmAgYW5kIGRlcml2YXRpdmVzIG9mIGBFcnJvcmAgc3VjaCBhcyBgUmVmZXJlbmNlRXJyb3JgLFxuICAgKiBgVHlwZUVycm9yYCwgYW5kIHVzZXItZGVmaW5lZCBvYmplY3RzIHRoYXQgZXh0ZW5kIGBFcnJvcmAuIE5vIG90aGVyIHR5cGUgb2ZcbiAgICogdmFsdWUgd2lsbCBnZW5lcmF0ZSBhIHN0YWNrIHRyYWNlIHdoZW4gaW5pdGlhbGl6ZWQuIFdpdGggdGhhdCBzYWlkLCB0aGVcbiAgICogYHRocm93YCBhc3NlcnRpb24gZG9lcyB0ZWNobmljYWxseSBzdXBwb3J0IGFueSB0eXBlIG9mIHZhbHVlIGJlaW5nIHRocm93bixcbiAgICogbm90IGp1c3QgYEVycm9yYCBhbmQgaXRzIGRlcml2YXRpdmVzLlxuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLnRocm93c2AgYW5kIGAuVGhyb3dgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAudGhyb3dgLlxuICAgKlxuICAgKiBAbmFtZSB0aHJvd1xuICAgKiBAYWxpYXMgdGhyb3dzXG4gICAqIEBhbGlhcyBUaHJvd1xuICAgKiBAcGFyYW0ge0Vycm9yfEVycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGVyck1zZ01hdGNoZXIgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAcmV0dXJucyBlcnJvciBmb3IgY2hhaW5pbmcgKG51bGwgaWYgbm8gZXJyb3IpXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydFRocm93cyAoZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpIHx8IGZhbHNlO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICAgIGVycm9yTGlrZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNhdWdodEVycjtcbiAgICB0cnkge1xuICAgICAgb2JqKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYXVnaHRFcnIgPSBlcnI7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSB0aGUgbmVnYXRlIGZsYWcgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIHZhbGlkIGFyZ3VtZW50IGl0IG1lYW5zIHdlIGRvIGV4cGVjdCBhbiBlcnJvclxuICAgIC8vIGJ1dCB3ZSB3YW50IGl0IHRvIG1hdGNoIGEgZ2l2ZW4gc2V0IG9mIGNyaXRlcmlhXG4gICAgdmFyIGV2ZXJ5QXJnSXNVbmRlZmluZWQgPSBlcnJvckxpa2UgPT09IHVuZGVmaW5lZCAmJiBlcnJNc2dNYXRjaGVyID09PSB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB3ZSd2ZSBnb3QgdGhlIG5lZ2F0ZSBmbGFnIGVuYWJsZWQgYW5kIGJvdGggYXJncywgd2Ugc2hvdWxkIG9ubHkgZmFpbCBpZiBib3RoIGFyZW4ndCBjb21wYXRpYmxlXG4gICAgLy8gU2VlIElzc3VlICM1NTEgYW5kIFBSICM2ODNAR2l0SHViXG4gICAgdmFyIGV2ZXJ5QXJnSXNEZWZpbmVkID0gQm9vbGVhbihlcnJvckxpa2UgJiYgZXJyTXNnTWF0Y2hlcik7XG4gICAgdmFyIGVycm9yTGlrZUZhaWwgPSBmYWxzZTtcbiAgICB2YXIgZXJyTXNnTWF0Y2hlckZhaWwgPSBmYWxzZTtcblxuICAgIC8vIENoZWNraW5nIGlmIGVycm9yIHdhcyB0aHJvd25cbiAgICBpZiAoZXZlcnlBcmdJc1VuZGVmaW5lZCB8fCAhZXZlcnlBcmdJc1VuZGVmaW5lZCAmJiAhbmVnYXRlKSB7XG4gICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gZGlzcGxheSByZXN1bHRzIGNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlaXIgdHlwZXNcbiAgICAgIHZhciBlcnJvckxpa2VTdHJpbmcgPSAnYW4gZXJyb3InO1xuICAgICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGVycm9yTGlrZVN0cmluZyA9ICcje2V4cH0nO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckxpa2UpIHtcbiAgICAgICAgZXJyb3JMaWtlU3RyaW5nID0gXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBjYXVnaHRFcnJcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAnICsgZXJyb3JMaWtlU3RyaW5nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgLCBlcnJvckxpa2UgJiYgZXJyb3JMaWtlLnRvU3RyaW5nKClcbiAgICAgICAgLCAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgP1xuICAgICAgICAgICAgY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiAodHlwZW9mIGNhdWdodEVyciA9PT0gJ3N0cmluZycgPyBjYXVnaHRFcnIgOiBjYXVnaHRFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvckxpa2UgJiYgY2F1Z2h0RXJyKSB7XG4gICAgICAvLyBXZSBzaG91bGQgY29tcGFyZSBpbnN0YW5jZXMgb25seSBpZiBgZXJyb3JMaWtlYCBpcyBhbiBpbnN0YW5jZSBvZiBgRXJyb3JgXG4gICAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdmFyIGlzQ29tcGF0aWJsZUluc3RhbmNlID0gXy5jaGVja0Vycm9yLmNvbXBhdGlibGVJbnN0YW5jZShjYXVnaHRFcnIsIGVycm9yTGlrZSk7XG5cbiAgICAgICAgaWYgKGlzQ29tcGF0aWJsZUluc3RhbmNlID09PSBuZWdhdGUpIHtcbiAgICAgICAgICAvLyBUaGVzZSBjaGVja3Mgd2VyZSBjcmVhdGVkIHRvIGVuc3VyZSB3ZSB3b24ndCBmYWlsIHRvbyBzb29uIHdoZW4gd2UndmUgZ290IGJvdGggYXJncyBhbmQgYSBuZWdhdGVcbiAgICAgICAgICAvLyBTZWUgSXNzdWUgIzU1MSBhbmQgUFIgIzY4M0BHaXRIdWJcbiAgICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgbmVnYXRlXG4gICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9JyArIChjYXVnaHRFcnIgJiYgIW5lZ2F0ZSA/ICcgYnV0ICN7YWN0fSB3YXMgdGhyb3duJyA6ICcnKVxuICAgICAgICAgICAgICAsIGVycm9yTGlrZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICwgY2F1Z2h0RXJyLnRvU3RyaW5nKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9IF8uY2hlY2tFcnJvci5jb21wYXRpYmxlQ29uc3RydWN0b3IoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgIG5lZ2F0ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9JyArIChjYXVnaHRFcnIgPyAnIGJ1dCAje2FjdH0gd2FzIHRocm93bicgOiAnJylcbiAgICAgICAgICAgICwgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpKVxuICAgICAgICAgICAgLCAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycikpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXVnaHRFcnIgJiYgZXJyTXNnTWF0Y2hlciAhPT0gdW5kZWZpbmVkICYmIGVyck1zZ01hdGNoZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIEhlcmUgd2UgY2hlY2sgY29tcGF0aWJsZSBtZXNzYWdlc1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gJ2luY2x1ZGluZyc7XG4gICAgICBpZiAoZXJyTXNnTWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBwbGFjZWhvbGRlciA9ICdtYXRjaGluZydcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQ29tcGF0aWJsZU1lc3NhZ2UgPSBfLmNoZWNrRXJyb3IuY29tcGF0aWJsZU1lc3NhZ2UoY2F1Z2h0RXJyLCBlcnJNc2dNYXRjaGVyKTtcbiAgICAgIGlmIChpc0NvbXBhdGlibGVNZXNzYWdlID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgICAgZXJyTXNnTWF0Y2hlckZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgbmVnYXRlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yICcgKyBwbGFjZWhvbGRlciArICcgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBub3QgJyArIHBsYWNlaG9sZGVyICsgJyAje2V4cH0nXG4gICAgICAgICAgICAsICBlcnJNc2dNYXRjaGVyXG4gICAgICAgICAgICAsICBfLmNoZWNrRXJyb3IuZ2V0TWVzc2FnZShjYXVnaHRFcnIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGJvdGggYXNzZXJ0aW9ucyBmYWlsZWQgYW5kIGJvdGggc2hvdWxkJ3ZlIG1hdGNoZWQgd2UgdGhyb3cgYW4gZXJyb3JcbiAgICBpZiAoZXJyb3JMaWtlRmFpbCAmJiBlcnJNc2dNYXRjaGVyRmFpbCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG5lZ2F0ZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfScgKyAoY2F1Z2h0RXJyID8gJyBidXQgI3thY3R9IHdhcyB0aHJvd24nIDogJycpXG4gICAgICAgICwgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpKVxuICAgICAgICAsIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgY2F1Z2h0RXJyKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd0aHJvdycsIGFzc2VydFRocm93cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Rocm93cycsIGFzc2VydFRocm93cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ1Rocm93JywgYXNzZXJ0VGhyb3dzKTtcblxuICAvKipcbiAgICogIyMjIC5yZXNwb25kVG8obWV0aG9kWywgbXNnXSlcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgYC5yZXNwb25kVG9gIGFzc2VydHMgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGhhcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGBtZXRob2RgLiBUaGUgbWV0aG9kIGNhbiBiZSBvd24gb3JcbiAgICogaW5oZXJpdGVkLCBhbmQgaXQgY2FuIGJlIGVudW1lcmFibGUgb3Igbm9uLWVudW1lcmFibGUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8ucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIGZ1bmN0aW9uLCBgLnJlc3BvbmRUb2AgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQnc1xuICAgKiBgcHJvdG90eXBlYCBwcm9wZXJ0eSBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBgbWV0aG9kYC4gQWdhaW4sIHRoZVxuICAgKiBtZXRob2QgY2FuIGJlIG93biBvciBpbmhlcml0ZWQsIGFuZCBpdCBjYW4gYmUgZW51bWVyYWJsZSBvciBub24tZW51bWVyYWJsZS5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS50by5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogQWRkIGAuaXRzZWxmYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBmb3JjZSBgLnJlc3BvbmRUb2AgdG8gdHJlYXQgdGhlXG4gICAqIHRhcmdldCBhcyBhIG5vbi1mdW5jdGlvbiBvYmplY3QsIGV2ZW4gaWYgaXQncyBhIGZ1bmN0aW9uLiBUaHVzLCBpdCBhc3NlcnRzXG4gICAqIHRoYXQgdGhlIHRhcmdldCBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBgbWV0aG9kYCwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCdzIGBwcm90b3R5cGVgIHByb3BlcnR5IGhhcyBhIG1ldGhvZCB3aXRoIHRoZVxuICAgKiBnaXZlbiBuYW1lIGBtZXRob2RgLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICogICAgIENhdC5oaXNzID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS5pdHNlbGYudG8ucmVzcG9uZFRvKCdoaXNzJykuYnV0Lm5vdC5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogV2hlbiBub3QgYWRkaW5nIGAuaXRzZWxmYCwgaXQncyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlXG4gICAqIHVzaW5nIGAucmVzcG9uZFRvYC4gU2VlIHRoZSBgLmFgIGRvYyBmb3IgaW5mbyBvbiBjaGVja2luZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8uYmUuYW4oJ29iamVjdCcpLnRoYXQucmVzcG9uZHNUbygnbWVvdycpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnJlc3BvbmRUb2AuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBEb2cgKCkge31cbiAgICogICAgIERvZy5wcm90b3R5cGUuYmFyayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBEb2coKSkudG8ubm90LnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBgLnJlc3BvbmRUb2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt9KS50by5yZXNwb25kVG8oJ21lb3cnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe30sICdub29vIHdoeSBmYWlsPz8nKS50by5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAucmVzcG9uZHNUb2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5yZXNwb25kVG9gLlxuICAgKlxuICAgKiBAbmFtZSByZXNwb25kVG9cbiAgICogQGFsaWFzIHJlc3BvbmRzVG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gcmVzcG9uZFRvIChtZXRob2QsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBpdHNlbGYgPSBmbGFnKHRoaXMsICdpdHNlbGYnKVxuICAgICAgLCBjb250ZXh0ID0gKCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmogJiYgIWl0c2VsZilcbiAgICAgICAgPyBvYmoucHJvdG90eXBlW21ldGhvZF1cbiAgICAgICAgOiBvYmpbbWV0aG9kXTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAnZnVuY3Rpb24nID09PSB0eXBlb2YgY29udGV4dFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byByZXNwb25kIHRvICcgKyBfLmluc3BlY3QobWV0aG9kKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgcmVzcG9uZCB0byAnICsgXy5pbnNwZWN0KG1ldGhvZClcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgncmVzcG9uZFRvJywgcmVzcG9uZFRvKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgncmVzcG9uZHNUbycsIHJlc3BvbmRUbyk7XG5cbiAgLyoqXG4gICAqICMjIyAuaXRzZWxmXG4gICAqXG4gICAqIEZvcmNlcyBhbGwgYC5yZXNwb25kVG9gIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGJlaGF2ZSBhcyBpZlxuICAgKiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgZXZlbiBpZiBpdCdzIGEgZnVuY3Rpb24uIFRodXMsIGl0XG4gICAqIGNhdXNlcyBgLnJlc3BvbmRUb2AgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW5cbiAgICogbmFtZSwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCdzIGBwcm90b3R5cGVgIHByb3BlcnR5IGhhcyBhXG4gICAqIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICogICAgIENhdC5oaXNzID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS5pdHNlbGYudG8ucmVzcG9uZFRvKCdoaXNzJykuYnV0Lm5vdC5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXRzZWxmXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnaXRzZWxmJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2l0c2VsZicsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5zYXRpc2Z5KG1hdGNoZXJbLCBtc2ddKVxuICAgKlxuICAgKiBJbnZva2VzIHRoZSBnaXZlbiBgbWF0Y2hlcmAgZnVuY3Rpb24gd2l0aCB0aGUgdGFyZ2V0IGJlaW5nIHBhc3NlZCBhcyB0aGVcbiAgICogZmlyc3QgYXJndW1lbnQsIGFuZCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMDtcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnNhdGlzZnlgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMjtcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBgLnNhdGlzZnlgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMjtcbiAgICogICAgIH0sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uc2F0aXNmeShmdW5jdGlvbihudW0pIHtcbiAgICogICAgICAgcmV0dXJuIG51bSA+IDI7XG4gICAqICAgICB9KTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuc2F0aXNmaWVzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLnNhdGlzZnlgLlxuICAgKlxuICAgKiBAbmFtZSBzYXRpc2Z5XG4gICAqIEBhbGlhcyBzYXRpc2ZpZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWF0Y2hlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gc2F0aXNmeSAobWF0Y2hlciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHZhciByZXN1bHQgPSBtYXRjaGVyKG9iaik7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHJlc3VsdFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5ICcgKyBfLm9iakRpc3BsYXkobWF0Y2hlcilcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnknICsgXy5vYmpEaXNwbGF5KG1hdGNoZXIpXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gZmFsc2UgOiB0cnVlXG4gICAgICAsIHJlc3VsdFxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzYXRpc2Z5Jywgc2F0aXNmeSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3NhdGlzZmllcycsIHNhdGlzZnkpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmNsb3NlVG8oZXhwZWN0ZWQsIGRlbHRhWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXIgdGhhdCdzIHdpdGhpbiBhIGdpdmVuICsvLSBgZGVsdGFgIHJhbmdlXG4gICAqIG9mIHRoZSBnaXZlbiBudW1iZXIgYGV4cGVjdGVkYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZVxuICAgKiB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmVxdWFsKDEuNSk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMSwgMC41KTtcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMiwgMC41KTtcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMSwgMSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuY2xvc2VUb2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoMS41KS50by5lcXVhbCgxLjUpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8ubm90LmJlLmNsb3NlVG8oMywgMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmNsb3NlVG9gIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMywgMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEuNSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmNsb3NlVG8oMywgMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmFwcHJveGltYXRlbHlgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuY2xvc2VUb2AuXG4gICAqXG4gICAqIEBuYW1lIGNsb3NlVG9cbiAgICogQGFsaWFzIGFwcHJveGltYXRlbHlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG5cbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnbnVtYmVyJyk7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGRlbHRhICE9PSAnbnVtYmVyJykge1xuICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuICAgICAgdmFyIGRlbHRhTWVzc2FnZSA9IGRlbHRhID09PSB1bmRlZmluZWQgPyBcIiwgYW5kIGEgZGVsdGEgaXMgcmVxdWlyZWRcIiA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnRzIHRvIGNsb3NlVG8gb3IgYXBwcm94aW1hdGVseSBtdXN0IGJlIG51bWJlcnMnICsgZGVsdGFNZXNzYWdlLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBNYXRoLmFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGFcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gJyArIGV4cGVjdGVkICsgJyArLy0gJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byAnICsgZXhwZWN0ZWQgKyAnICsvLSAnICsgZGVsdGFcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2xvc2VUbycsIGNsb3NlVG8pO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdhcHByb3hpbWF0ZWx5JywgY2xvc2VUbyk7XG5cbiAgLy8gTm90ZTogRHVwbGljYXRlcyBhcmUgaWdub3JlZCBpZiB0ZXN0aW5nIGZvciBpbmNsdXNpb24gaW5zdGVhZCBvZiBzYW1lbmVzcy5cbiAgZnVuY3Rpb24gaXNTdWJzZXRPZihzdWJzZXQsIHN1cGVyc2V0LCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSB7XG4gICAgaWYgKCFjb250YWlucykge1xuICAgICAgaWYgKHN1YnNldC5sZW5ndGggIT09IHN1cGVyc2V0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgc3VwZXJzZXQgPSBzdXBlcnNldC5zbGljZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSwgaWR4KSB7XG4gICAgICBpZiAob3JkZXJlZCkgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdKSA6IGVsZW0gPT09IHN1cGVyc2V0W2lkeF07XG5cbiAgICAgIGlmICghY21wKSB7XG4gICAgICAgIHZhciBtYXRjaElkeCA9IHN1cGVyc2V0LmluZGV4T2YoZWxlbSk7XG4gICAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBSZW1vdmUgbWF0Y2ggZnJvbSBzdXBlcnNldCBzbyBub3QgY291bnRlZCB0d2ljZSBpZiBkdXBsaWNhdGUgaW4gc3Vic2V0LlxuICAgICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIsIG1hdGNoSWR4KSB7XG4gICAgICAgIGlmICghY21wKGVsZW0sIGVsZW0yKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIFJlbW92ZSBtYXRjaCBmcm9tIHN1cGVyc2V0IHNvIG5vdCBjb3VudGVkIHR3aWNlIGlmIGR1cGxpY2F0ZSBpbiBzdWJzZXQuXG4gICAgICAgIGlmICghY29udGFpbnMpIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5tZW1iZXJzKHNldFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGFycmF5IGhhcyB0aGUgc2FtZSBtZW1iZXJzIGFzIHRoZSBnaXZlbiBhcnJheVxuICAgKiBgc2V0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubWVtYmVycyhbMiwgMSwgM10pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAyXSkudG8uaGF2ZS5tZW1iZXJzKFsyLCAxLCAyXSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1lbWJlcnMgYXJlIGNvbXBhcmVkIHVzaW5nIHN0cmljdCAoYD09PWApIGVxdWFsaXR5LiBBZGQgYC5kZWVwYFxuICAgKiBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWUgdGhlIGBkZWVwLWVxbGBcbiAgICogcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBtZW1iZXIgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW3thOiAxfV0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaGF2ZS5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgb3JkZXIgZG9lc24ndCBtYXR0ZXIuIEFkZCBgLm9yZGVyZWRgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvXG4gICAqIHJlcXVpcmUgdGhhdCBtZW1iZXJzIGFwcGVhciBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUub3JkZXJlZC5tZW1iZXJzKFsxLCAyLCAzXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLm1lbWJlcnMoWzIsIDEsIDNdKVxuICAgKiAgICAgICAuYnV0Lm5vdC5vcmRlcmVkLm1lbWJlcnMoWzIsIDEsIDNdKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYm90aCBhcnJheXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplLiBBZGQgYC5pbmNsdWRlYCBlYXJsaWVyIGluXG4gICAqIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXQgdGhlIHRhcmdldCdzIG1lbWJlcnMgYmUgYSBzdXBlcnNldCBvZiB0aGVcbiAgICogZXhwZWN0ZWQgbWVtYmVycy4gTm90ZSB0aGF0IGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgaW4gdGhlIHN1YnNldCB3aGVuXG4gICAqIGAuaW5jbHVkZWAgaXMgYWRkZWQuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgaXMgYSBzdXBlcnNldCBvZiBbMSwgMl0gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUubWVtYmVycyhbMSwgMl0pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8ubm90LmhhdmUubWVtYmVycyhbMSwgMl0pO1xuICAgKlxuICAgKiAgICAgLy8gRHVwbGljYXRlcyBpbiB0aGUgc3Vic2V0IGFyZSBpZ25vcmVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm1lbWJlcnMoWzEsIDIsIDIsIDJdKTtcbiAgICpcbiAgICogYC5kZWVwYCwgYC5vcmRlcmVkYCwgYW5kIGAuaW5jbHVkZWAgY2FuIGFsbCBiZSBjb21iaW5lZC4gSG93ZXZlciwgaWZcbiAgICogYC5pbmNsdWRlYCBhbmQgYC5vcmRlcmVkYCBhcmUgY29tYmluZWQsIHRoZSBvcmRlcmluZyBiZWdpbnMgYXQgdGhlIHN0YXJ0IG9mXG4gICAqIGJvdGggYXJyYXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFt7YTogMX0sIHtiOiAyfSwge2M6IDN9XSlcbiAgICogICAgICAgLnRvLmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoW3thOiAxfSwge2I6IDJ9XSlcbiAgICogICAgICAgLmJ1dC5ub3QuaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhbe2I6IDJ9LCB7YzogM31dKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5tZW1iZXJzYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQgYXJyYXkgZG9lc24ndCBoYXZlIGFsbCBvZiB0aGUgc2FtZSBtZW1iZXJzIGFzXG4gICAqIHRoZSBnaXZlbiBhcnJheSBgc2V0YCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBzb21lIG9mIHRoZW0uIEl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW4gYXNzZXJ0aW9uXG4gICAqIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmluY2x1ZGUoMykuYW5kLm5vdC5pbmNsdWRlKDQpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmhhdmUubWVtYmVycyhbMywgNF0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5tZW1iZXJzYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5oYXZlLm1lbWJlcnMoWzEsIDIsIDNdLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoWzEsIDJdLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5tZW1iZXJzKFsxLCAyLCAzXSk7XG4gICAqXG4gICAqIEBuYW1lIG1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtZW1iZXJzJywgZnVuY3Rpb24gKHN1YnNldCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcblxuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbignYXJyYXknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7XG5cbiAgICB2YXIgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpO1xuICAgIHZhciBvcmRlcmVkID0gZmxhZyh0aGlzLCAnb3JkZXJlZCcpO1xuXG4gICAgdmFyIHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG5cbiAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgIHN1YmplY3QgPSBvcmRlcmVkID8gJ2FuIG9yZGVyZWQgc3VwZXJzZXQnIDogJ2Egc3VwZXJzZXQnO1xuICAgICAgZmFpbE1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIGJlICcgKyBzdWJqZWN0ICsgJyBvZiAje2V4cH0nO1xuICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSAnICsgc3ViamVjdCArICcgb2YgI3tleHB9JztcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViamVjdCA9IG9yZGVyZWQgPyAnb3JkZXJlZCBtZW1iZXJzJyA6ICdtZW1iZXJzJztcbiAgICAgIGZhaWxNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIHRoZSBzYW1lICcgKyBzdWJqZWN0ICsgJyBhcyAje2V4cH0nO1xuICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lICcgKyBzdWJqZWN0ICsgJyBhcyAje2V4cH0nO1xuICAgIH1cblxuICAgIHZhciBjbXAgPSBmbGFnKHRoaXMsICdkZWVwJykgPyBmbGFnKHRoaXMsICdlcWwnKSA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKVxuICAgICAgLCBmYWlsTXNnXG4gICAgICAsIGZhaWxOZWdhdGVNc2dcbiAgICAgICwgc3Vic2V0XG4gICAgICAsIG9ialxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAub25lT2YobGlzdFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBhcnJheSBgbGlzdGAuIEhvd2V2ZXIsXG4gICAqIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5vbmVPZihbMSwgMiwgM10pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQ29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCB1c2luZyBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eS5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5vbmVPZmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLm9uZU9mKFsyLCAzLCA0XSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBJdCBjYW4gYWxzbyBiZSBjaGFpbmVkIHdpdGggYC5jb250YWluYCBvciBgLmluY2x1ZGVgLCB3aGljaCB3aWxsIHdvcmsgd2l0aFxuICAgKiBib3RoIGFycmF5cyBhbmQgc3RyaW5nczpcbiAgICpcbiAgICogICAgIGV4cGVjdCgnVG9kYXkgaXMgc3VubnknKS50by5jb250YWluLm9uZU9mKFsnc3VubnknLCAnY2xvdWR5J10pXG4gICAqICAgICBleHBlY3QoJ1RvZGF5IGlzIHJhaW55JykudG8ubm90LmNvbnRhaW4ub25lT2YoWydzdW5ueScsICdjbG91ZHknXSlcbiAgICogICAgIGV4cGVjdChbMSwyLDNdKS50by5jb250YWluLm9uZU9mKFszLDQsNV0pXG4gICAqICAgICBleHBlY3QoWzEsMiwzXSkudG8ubm90LmNvbnRhaW4ub25lT2YoWzQsNSw2XSlcbiAgICpcbiAgICogYC5vbmVPZmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLm9uZU9mKFsyLCAzLCA0XSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5vbmVPZihbMiwgMywgNF0pO1xuICAgKlxuICAgKiBAbmFtZSBvbmVPZlxuICAgKiBAcGFyYW0ge0FycmF5PCo+fSBsaXN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBvbmVPZiAobGlzdCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIGV4cGVjdGVkID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKVxuICAgICAgLCBpc0RlZXAgPSBmbGFnKHRoaXMsICdkZWVwJylcbiAgICAgICwgZXFsID0gZmxhZyh0aGlzLCAnZXFsJyk7XG4gICAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbignYXJyYXknKTtcblxuICAgIGlmIChjb250YWlucykge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkgeyByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMSB9KVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiBvbmUgb2YgI3tleHB9J1xuICAgICAgICAsIGxpc3RcbiAgICAgICAgLCBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHsgcmV0dXJuIGVxbChleHBlY3RlZCwgcG9zc2liaWxpdHkpIH0pXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxpc3QuaW5kZXhPZihleHBlY3RlZCkgPiAtMVxuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvbmVPZicsIG9uZU9mKTtcblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2Uoc3ViamVjdFssIHByb3BbLCBtc2ddXSlcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGAuY2hhbmdlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgZGlmZmVyZW50IHZhbHVlIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZSB0aGUgdGFyZ2V0XG4gICAqIGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyd2FyZC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IGBzdWJqZWN0YCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChnZXREb3RzKCkpLnRvLmVxdWFsKCcnKTtcbiAgICogICAgIGFkZERvdCgpO1xuICAgKiAgICAgZXhwZWN0KGdldERvdHMoKSkudG8uZXF1YWwoJy4nKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8uY2hhbmdlKGdldERvdHMpO1xuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmNoYW5nZWAgYXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGVcbiAgICogZ2l2ZW4gb2JqZWN0IGBzdWJqZWN0YCdzIGBwcm9wYCBwcm9wZXJ0eSBpcyBkaWZmZXJlbnQgYmVmb3JlIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gYWZ0ZXJ3YXJkLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge2RvdHM6ICcnfVxuICAgKiAgICAgICAsIGFkZERvdCA9IGZ1bmN0aW9uICgpIHsgbXlPYmouZG90cyArPSAnLic7IH07XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG15T2JqKS50by5oYXZlLnByb3BlcnR5KCdkb3RzJywgJycpO1xuICAgKiAgICAgYWRkRG90KCk7XG4gICAqICAgICBleHBlY3QobXlPYmopLnRvLmhhdmUucHJvcGVydHkoJ2RvdHMnLCAnLicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkRG90KS50by5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIFN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBiZWZvcmUgYW5kIGFmdGVyIHZhbHVlcy5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5jaGFuZ2VgLlxuICAgKlxuICAgKiAgICAgdmFyIGRvdHMgPSAnJ1xuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7ZG90czogJyd9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtkb3RzOiAnJ31cbiAgICogICAgICAgLCBhZGREb3QgPSBmdW5jdGlvbiAoKSB7IG15T2JqLmRvdHMgKz0gJy4nOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8ubm90LmNoYW5nZShteU9iaiwgJ2RvdHMnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhbHNvIGNhdXNlcyBhbGwgYC5ieWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG9cbiAgICogYXNzZXJ0IGhvdyBtdWNoIGEgbnVtZXJpYyBzdWJqZWN0IHdhcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5LiBIb3dldmVyLFxuICAgKiBpdCdzIGRhbmdlcm91cyB0byB1c2UgYC5jaGFuZ2UuYnlgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXNcbiAgICogdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGUgc3ViamVjdCBlaXRoZXIgaW5jcmVhc2VzIGJ5XG4gICAqIHRoZSBnaXZlbiBkZWx0YSwgb3IgdGhhdCBpdCBkZWNyZWFzZXMgYnkgdGhlIGdpdmVuIGRlbHRhLiBJdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvblxuICAgKiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuY2hhbmdlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5jaGFuZ2VgLlxuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VcbiAgICogQGFsaWFzIGNoYW5nZXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRDaGFuZ2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgZm4oKTtcblxuICAgIHZhciBmaW5hbCA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogJy4nICsgcHJvcDtcblxuICAgIC8vIFRoaXMgZ2V0cyBmbGFnZ2VkIGJlY2F1c2Ugb2YgdGhlIC5ieShkZWx0YSkgYXNzZXJ0aW9uXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnY2hhbmdlJyk7XG4gICAgZmxhZyh0aGlzLCAncmVhbERlbHRhJywgZmluYWwgIT09IGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbml0aWFsICE9PSBmaW5hbFxuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gY2hhbmdlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGNoYW5nZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2hhbmdlJywgYXNzZXJ0Q2hhbmdlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2NoYW5nZXMnLCBhc3NlcnRDaGFuZ2VzKTtcblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZShzdWJqZWN0WywgcHJvcFssIG1zZ11dKVxuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYC5pbmNyZWFzZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBmdW5jdGlvblxuICAgKiBgc3ViamVjdGAgcmV0dXJucyBhIGdyZWF0ZXIgbnVtYmVyIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gd2hlbiBpdCdzIGludm9rZWQgYmVmb3JlaGFuZC4gYC5pbmNyZWFzZWAgYWxzb1xuICAgKiBjYXVzZXMgYWxsIGAuYnlgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGFzc2VydCBob3cgbXVjaFxuICAgKiBncmVhdGVyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGluY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IHZhbCArPSAyOyB9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UoZ2V0VmFsKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmluY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGdyZWF0ZXIgYWZ0ZXIgaW52b2tpbmcgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBjb21wYXJlZCB0byBiZWZvcmVoYW5kLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluY3JlYXNlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBkZWNyZWFzZXMsIG9yIHRoYXQgaXQgc3RheXMgdGhlIHNhbWUuXG4gICAqIEl0J3Mgb2Z0ZW4gYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW5cbiAgICogd3JpdGUgYW4gYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIGRlY3JlYXNlLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgaXRcbiAgICogZGVjcmVhc2VkIGJ5IHRoZSBleHBlY3RlZCBhbW91bnQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8ubm90LmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIHN0YXkgdGhlIHNhbWUsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmNoYW5nZShteU9iaiwgJ3ZhbCcpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5pbmNyZWFzZWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgdHdvIGFyZ3VtZW50cywgYWx3YXlzXG4gICAqIHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIHZhciB2YWwgPSAxXG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3AsICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNyZWFzZShnZXRWYWwpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5pbmNyZWFzZXNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuaW5jcmVhc2VgLlxuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZVxuICAgKiBAYWxpYXMgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzdWJqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlclxuICAgIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnbnVtYmVyJyk7XG5cbiAgICBmbigpO1xuXG4gICAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICAgIHZhciBtc2dPYmogPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiAnLicgKyBwcm9wO1xuXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnaW5jcmVhc2UnKTtcbiAgICBmbGFnKHRoaXMsICdyZWFsRGVsdGEnLCBmaW5hbCAtIGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBmaW5hbCAtIGluaXRpYWwgPiAwXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBpbmNyZWFzZSdcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIG5vdCBpbmNyZWFzZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5jcmVhc2UnLCBhc3NlcnRJbmNyZWFzZXMpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbmNyZWFzZXMnLCBhc3NlcnRJbmNyZWFzZXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlY3JlYXNlKHN1YmplY3RbLCBwcm9wWywgbXNnXV0pXG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgbGVzc2VyIG51bWJlciB3aGVuIGl0J3MgaW52b2tlZCBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZWhhbmQuIGAuZGVjcmVhc2VgIGFsc29cbiAgICogY2F1c2VzIGFsbCBgLmJ5YCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBhc3NlcnQgaG93IG11Y2hcbiAgICogbGVzc2VyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBkZWNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGRlY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBzdWJ0cmFjdFR3byA9IGZ1bmN0aW9uICgpIHsgdmFsIC09IDI7IH1cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCkuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGxlc3NlciBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIGJlZm9yZWhhbmQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZGVjcmVhc2VgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHN1YmplY3QgZWl0aGVyIGluY3JlYXNlcywgb3IgdGhhdCBpdCBzdGF5cyB0aGUgc2FtZS5cbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlblxuICAgKiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gaW5jcmVhc2UsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCBpdFxuICAgKiBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5ub3QuZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSB0aGUgc2FtZSwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5ub3QuY2hhbmdlKG15T2JqLCAndmFsJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmRlY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmRlY3JlYXNlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge31cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmRlY3JlYXNlKGdldFZhbCk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmRlY3JlYXNlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5kZWNyZWFzZWAuXG4gICAqXG4gICAqIEBuYW1lIGRlY3JlYXNlXG4gICAqIEBhbGlhcyBkZWNyZWFzZXNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMgKHN1YmplY3QsIHByb3AsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBmbiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgdmFyIGluaXRpYWw7XG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyXG4gICAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdudW1iZXInKTtcblxuICAgIGZuKCk7XG5cbiAgICB2YXIgZmluYWwgPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gICAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6ICcuJyArIHByb3A7XG5cbiAgICBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicsIG1zZ09iaik7XG4gICAgZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnLCBpbml0aWFsKTtcbiAgICBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnLCBmaW5hbCk7XG4gICAgZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicsICdkZWNyZWFzZScpO1xuICAgIGZsYWcodGhpcywgJ3JlYWxEZWx0YScsIGluaXRpYWwgLSBmaW5hbCk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZpbmFsIC0gaW5pdGlhbCA8IDBcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIGRlY3JlYXNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGRlY3JlYXNlJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdkZWNyZWFzZScsIGFzc2VydERlY3JlYXNlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2RlY3JlYXNlcycsIGFzc2VydERlY3JlYXNlcyk7XG5cbiAgLyoqXG4gICAqICMjIyAuYnkoZGVsdGFbLCBtc2ddKVxuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhbiBgLmluY3JlYXNlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXRcbiAgICogdGhlIHN1YmplY3Qgb2YgdGhlIGAuaW5jcmVhc2VgIGFzc2VydGlvbiBpbmNyZWFzZWQgYnkgdGhlIGdpdmVuIGBkZWx0YWAuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuZGVjcmVhc2VgIGFzc2VydGlvbiBpbiB0aGUgY2hhaW4sIGAuYnlgIGFzc2VydHMgdGhhdCB0aGVcbiAgICogc3ViamVjdCBvZiB0aGUgYC5kZWNyZWFzZWAgYXNzZXJ0aW9uIGRlY3JlYXNlZCBieSB0aGUgZ2l2ZW4gYGRlbHRhYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuY2hhbmdlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXQgdGhlXG4gICAqIHN1YmplY3Qgb2YgdGhlIGAuY2hhbmdlYCBhc3NlcnRpb24gZWl0aGVyIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkgdGhlXG4gICAqIGdpdmVuIGBkZWx0YWAuIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIHVzZSBgLmNoYW5nZS5ieWAuIFRoZSBwcm9ibGVtIGlzXG4gICAqIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlXG4gICAqIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0c1xuICAgKiB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5ieWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgc3ViamVjdCBjaGFuZ2VkIGJ5IGl0cyBleHBlY3RlZCBkZWx0YSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgaXQgZGlkbid0IGNoYW5nZSBieSBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgZGVsdGFzLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnV0Lm5vdC5ieSgzKTtcbiAgICpcbiAgICogYC5ieWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvXG4gICAqIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kXG4gICAqIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoYWRkVHdvLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzKTtcbiAgICpcbiAgICogQG5hbWUgYnlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWx0YShkZWx0YSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgbXNnT2JqID0gZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonKTtcbiAgICB2YXIgaW5pdGlhbCA9IGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGZpbmFsID0gZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGJlaGF2aW9yID0gZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicpO1xuICAgIHZhciByZWFsRGVsdGEgPSBmbGFnKHRoaXMsICdyZWFsRGVsdGEnKTtcblxuICAgIHZhciBleHByZXNzaW9uO1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2NoYW5nZScpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cHJlc3Npb24gPSByZWFsRGVsdGEgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGV4cHJlc3Npb25cbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvICcgKyBiZWhhdmlvciArICcgYnkgJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBub3QgJyArIGJlaGF2aW9yICsgJyBieSAnICsgZGVsdGFcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYnknLCBhc3NlcnREZWx0YSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXh0ZW5zaWJsZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBleHRlbnNpYmxlLCB3aGljaCBtZWFucyB0aGF0IG5ldyBwcm9wZXJ0aWVzIGNhblxuICAgKiBiZSBhZGRlZCB0byBpdC4gUHJpbWl0aXZlcyBhcmUgbmV2ZXIgZXh0ZW5zaWJsZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXh0ZW5zaWJsZWAuXG4gICAqXG4gICAqICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSlcbiAgICogICAgICAgLCBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSlcbiAgICogICAgICAgLCBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub25FeHRlbnNpYmxlT2JqZWN0KS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbiAgICogICAgIGV4cGVjdChzZWFsZWRPYmplY3QpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEBuYW1lIGV4dGVuc2libGVcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdleHRlbnNpYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgLy8gSW4gRVM1LCBpZiB0aGUgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QgaXMgYSBwcmltaXRpdmUsIHRoZW4gaXQgd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICAvLyBJbiBFUzYsIGEgbm9uLW9iamVjdCBhcmd1bWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGEgbm9uLWV4dGVuc2libGUgb3JkaW5hcnkgb2JqZWN0LCBzaW1wbHkgcmV0dXJuIGZhbHNlLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc0V4dGVuc2libGVcbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIEVTNiBiZWhhdmlvciBmb3IgRVM1IGVudmlyb25tZW50cy5cblxuICAgIHZhciBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXNFeHRlbnNpYmxlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGUnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnNlYWxlZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzZWFsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbmV3IHByb3BlcnRpZXMgY2FuJ3QgYmVcbiAgICogYWRkZWQgdG8gaXQsIGFuZCBpdHMgZXhpc3RpbmcgcHJvcGVydGllcyBjYW4ndCBiZSByZWNvbmZpZ3VyZWQgb3IgZGVsZXRlZC5cbiAgICogSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbiBzdGlsbCBiZSByZWFzc2lnbmVkXG4gICAqIHRvIGRpZmZlcmVudCB2YWx1ZXMuIFByaW1pdGl2ZXMgYXJlIGFsd2F5cyBzZWFsZWQuXG4gICAqXG4gICAqICAgICB2YXIgc2VhbGVkT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHNlYWxlZE9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLnNlYWxlZDtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5zZWFsZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLnNlYWxlZDtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5zZWFsZWQ7XG4gICAqXG4gICAqIEBuYW1lIHNlYWxlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3NlYWxlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIHNlYWxlZCBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzU2VhbGVkXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNTZWFsZWQgPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzU2VhbGVkKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc1NlYWxlZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWQnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBzZWFsZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZnJvemVuXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGZyb3plbiwgd2hpY2ggbWVhbnMgdGhhdCBuZXcgcHJvcGVydGllcyBjYW4ndCBiZVxuICAgKiBhZGRlZCB0byBpdCwgYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbid0IGJlIHJlYXNzaWduZWQgdG8gZGlmZmVyZW50XG4gICAqIHZhbHVlcywgcmVjb25maWd1cmVkLCBvciBkZWxldGVkLiBQcmltaXRpdmVzIGFyZSBhbHdheXMgZnJvemVuLlxuICAgKlxuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuZnJvemVuO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmZyb3plbjtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5mcm96ZW5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmZyb3plbjtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5mcm96ZW47XG4gICAqXG4gICAqIEBuYW1lIGZyb3plblxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Zyb3plbicsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIGZyb3plbiBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzRnJvemVuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc0Zyb3plblxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW4nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW4nXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZmluaXRlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyLCBhbmQgaXNuJ3QgYE5hTmAgb3IgcG9zaXRpdmUvbmVnYXRpdmVcbiAgICogYEluZmluaXR5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5maW5pdGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZmluaXRlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBpc24ndCBhIG51bWJlciwgb3IgdGhhdCBpdCdzIGBOYU5gLCBvclxuICAgKiB0aGF0IGl0J3MgcG9zaXRpdmUgYEluZmluaXR5YCwgb3IgdGhhdCBpdCdzIG5lZ2F0aXZlIGBJbmZpbml0eWAuIEl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW5cbiAgICogYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXNuJ3QgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogdGhhdCBpdCdzIHRoZSBleHBlY3RlZCB0eXBlLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBpc24ndCBvbmUgb2ZcbiAgICogbWFueSB1bmV4cGVjdGVkIHR5cGVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmJlLmZpbml0ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBiZSBgTmFOYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5XG4gICAqIHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoTmFOKS50by5iZS5OYU47IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoTmFOKS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdChJbmZpbml0eSkudG8uZXF1YWwoSW5maW5pdHkpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KEluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIG5lZ2F0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgtSW5maW5pdHkpLnRvLmVxdWFsKC1JbmZpbml0eSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoLUluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZpbml0ZTtcbiAgICpcbiAgICogQG5hbWUgZmluaXRlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZmluaXRlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdudW1iZXInICYmIGlzRmluaXRlKG9iailcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICk7XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIGNoYWkuZXhwZWN0ID0gZnVuY3Rpb24gKHZhbCwgbWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgY2hhaS5Bc3NlcnRpb24odmFsLCBtZXNzYWdlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5mYWlsKFttZXNzYWdlXSlcbiAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICpcbiAgICogVGhyb3cgYSBmYWlsdXJlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0LmZhaWwoKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiPlwiKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgKlxuICAgKiBAbmFtZSBmYWlsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgY2hhaS5leHBlY3QuZmFpbCA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICBhY3R1YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ2V4cGVjdC5mYWlsKCknO1xuICAgIHRocm93IG5ldyBjaGFpLkFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAsIG9wZXJhdG9yOiBvcGVyYXRvclxuICAgIH0sIGNoYWkuZXhwZWN0LmZhaWwpO1xuICB9O1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblxuICBmdW5jdGlvbiBsb2FkU2hvdWxkICgpIHtcbiAgICAvLyBleHBsaWNpdGx5IGRlZmluZSB0aGlzIG1ldGhvZCBhcyBmdW5jdGlvbiBhcyB0byBoYXZlIGl0J3MgbmFtZSB0byBpbmNsdWRlIGFzIGBzc2ZpYFxuICAgIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nXG4gICAgICAgICAgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlclxuICAgICAgICAgIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuXG4gICAgICAgICAgfHwgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sXG4gICAgICAgICAgfHwgdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMudmFsdWVPZigpLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9jaGFpL2lzc3Vlcy84NjogdGhpcyBtYWtlc1xuICAgICAgLy8gYHdoYXRldmVyLnNob3VsZCA9IHNvbWVWYWx1ZWAgYWN0dWFsbHkgc2V0IGBzb21lVmFsdWVgLCB3aGljaCBpc1xuICAgICAgLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGBnbG9iYWwuc2hvdWxkID0gcmVxdWlyZSgnY2hhaScpLnNob3VsZCgpYC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgW1tEZWZpbmVQcm9wZXJ0eV1dIGluc3RlYWQgb2YgW1tQdXRdXVxuICAgICAgLy8gc2luY2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIHRyaWdnZXIgdGhpcyB2ZXJ5IHNldHRlciFcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2hvdWxkJywge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBtb2RpZnkgT2JqZWN0LnByb3RvdHlwZSB0byBoYXZlIGBzaG91bGRgXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICdzaG91bGQnLCB7XG4gICAgICBzZXQ6IHNob3VsZFNldHRlclxuICAgICAgLCBnZXQ6IHNob3VsZEdldHRlclxuICAgICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzaG91bGQgPSB7fTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICAgKlxuICAgICAqIFRocm93IGEgZmFpbHVyZS5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZmFpbCgpO1xuICAgICAqICAgICBzaG91bGQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgICAqICAgICBzaG91bGQuZmFpbCgxLCAyKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAgICogICAgIHNob3VsZC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAbmFtZSBmYWlsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvclxuICAgICAqIEBuYW1lc3BhY2UgQkREXG4gICAgICogQGFwaSBwdWJsaWNcbiAgICAgKi9cblxuICAgIHNob3VsZC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICAgIGFjdHVhbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Nob3VsZC5mYWlsKCknO1xuICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yXG4gICAgICB9LCBzaG91bGQuZmFpbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXF1YWwoMywgJzMnLCAnPT0gY29lcmNlcyB2YWx1ZXMgdG8gc3RyaW5ncycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLmVxdWFsID0gZnVuY3Rpb24gKHZhbDEsIHZhbDIsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwxLCBtc2cpLnRvLmVxdWFsKHZhbDIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLnRocm93KGZ1bmN0aW9uLCBbY29uc3RydWN0b3Ivc3RyaW5nL3JlZ2V4cF0sIFtzdHJpbmcvcmVnZXhwXSwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyB0aGF0IGBmdW5jdGlvbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mXG4gICAgICogYGNvbnN0cnVjdG9yYCwgb3IgYWx0ZXJuYXRlbHkgdGhhdCBpdCB3aWxsIHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgJ2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvcicpO1xuICAgICAqICAgICBzaG91bGQudGhyb3coZm4sIC9mdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3IvKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgUmVmZXJlbmNlRXJyb3IsICdmdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3InKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvciwgL2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvci8pO1xuICAgICAqXG4gICAgICogQG5hbWUgdGhyb3dcbiAgICAgKiBAYWxpYXMgVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgZm9vID0gJ2hpJztcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXhpc3QoZm9vLCAnZm9vIGV4aXN0cycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXhpc3RcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQuZXhpc3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICAgIH1cblxuICAgIC8vIG5lZ2F0aW9uXG4gICAgc2hvdWxkLm5vdCA9IHt9XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLm5vdC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgaW5lcXVhbGl0eSAoYCE9YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAgICpcbiAgICAgKiAgICAgc2hvdWxkLm5vdC5lcXVhbCgzLCA0LCAndGhlc2UgbnVtYmVycyBhcmUgbm90IGVxdWFsJyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBub3QuZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5lcXVhbCA9IGZ1bmN0aW9uICh2YWwxLCB2YWwyLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsMSwgbXNnKS50by5ub3QuZXF1YWwodmFsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAudGhyb3coZnVuY3Rpb24sIFtjb25zdHJ1Y3Rvci9yZWdleHBdLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIHRoYXQgYGZ1bmN0aW9uYCB3aWxsIF9ub3RfIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2ZcbiAgICAgKiBgY29uc3RydWN0b3JgLCBvciBhbHRlcm5hdGVseSB0aGF0IGl0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC5ub3QudGhyb3coZm4sIEVycm9yLCAnZnVuY3Rpb24gZG9lcyBub3QgdGhyb3cnKTtcbiAgICAgKlxuICAgICAqIEBuYW1lIG5vdC50aHJvd1xuICAgICAqIEBhbGlhcyBub3QuVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5UaHJvdyA9IGZ1bmN0aW9uIChmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLm5vdC5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5ub3QuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgYmFyID0gbnVsbDtcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQubm90LmV4aXN0KGJhciwgJ2JhciBkb2VzIG5vdCBleGlzdCcpO1xuICAgICAqXG4gICAgICogQG5hbWUgbm90LmV4aXN0XG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5leGlzdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICAgIH1cblxuICAgIHNob3VsZFsndGhyb3cnXSA9IHNob3VsZFsnVGhyb3cnXTtcbiAgICBzaG91bGQubm90Wyd0aHJvdyddID0gc2hvdWxkLm5vdFsnVGhyb3cnXTtcblxuICAgIHJldHVybiBzaG91bGQ7XG4gIH07XG5cbiAgY2hhaS5zaG91bGQgPSBsb2FkU2hvdWxkO1xuICBjaGFpLlNob3VsZCA9IGxvYWRTaG91bGQ7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcbiAgLyohXG4gICAqIENoYWkgZGVwZW5kZW5jaWVzLlxuICAgKi9cblxuICB2YXIgQXNzZXJ0aW9uID0gY2hhaS5Bc3NlcnRpb25cbiAgICAsIGZsYWcgPSB1dGlsLmZsYWc7XG5cbiAgLyohXG4gICAqIE1vZHVsZSBleHBvcnQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiAjIyMgYXNzZXJ0KGV4cHJlc3Npb24sIG1lc3NhZ2UpXG4gICAqXG4gICAqIFdyaXRlIHlvdXIgb3duIHRlc3QgZXhwcmVzc2lvbnMuXG4gICAqXG4gICAqICAgICBhc3NlcnQoJ2ZvbycgIT09ICdiYXInLCAnZm9vIGlzIG5vdCBiYXInKTtcbiAgICogICAgIGFzc2VydChBcnJheS5pc0FycmF5KFtdKSwgJ2VtcHR5IGFycmF5cyBhcmUgYXJyYXlzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cHJlc3Npb24gdG8gdGVzdCBmb3IgdHJ1dGhpbmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSB0byBkaXNwbGF5IG9uIGVycm9yXG4gICAqIEBuYW1lIGFzc2VydFxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB2YXIgYXNzZXJ0ID0gY2hhaS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwcmVzcywgZXJybXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG51bGwsIG51bGwsIGNoYWkuYXNzZXJ0LCB0cnVlKTtcbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwcmVzc1xuICAgICAgLCBlcnJtc2dcbiAgICAgICwgJ1sgbmVnYXRpb24gbWVzc2FnZSB1bmF2YWlsYWJsZSBdJ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAqICMjIyAuZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0sIFtvcGVyYXRvcl0pXG4gICAqXG4gICAqIFRocm93IGEgZmFpbHVyZS4gTm9kZS5qcyBgYXNzZXJ0YCBtb2R1bGUtY29tcGF0aWJsZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5mYWlsKCk7XG4gICAqICAgICBhc3NlcnQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCB1bmRlZmluZWQsIFwiPlwiKTtcbiAgICpcbiAgICogQG5hbWUgZmFpbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIC8vIENvbXBseSB3aXRoIE5vZGUncyBmYWlsKFttZXNzYWdlXSkgaW50ZXJmYWNlXG5cbiAgICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgICAgYWN0dWFsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdhc3NlcnQuZmFpbCgpJztcbiAgICB0aHJvdyBuZXcgY2hhaS5Bc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAsIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgLCBvcGVyYXRvcjogb3BlcmF0b3JcbiAgICB9LCBhc3NlcnQuZmFpbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc09rKCdldmVyeXRoaW5nJywgJ2V2ZXJ5dGhpbmcgaXMgb2snKTtcbiAgICogICAgIGFzc2VydC5pc09rKGZhbHNlLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICpcbiAgICogQG5hbWUgaXNPa1xuICAgKiBAYWxpYXMgb2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzT2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPaywgdHJ1ZSkuaXMub2s7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZhbHN5LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90T2soJ2V2ZXJ5dGhpbmcnLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICogICAgIGFzc2VydC5pc05vdE9rKGZhbHNlLCAndGhpcyB3aWxsIHBhc3MnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPa1xuICAgKiBAYWxpYXMgbm90T2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPaywgdHJ1ZSkuaXMubm90Lm9rO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5lcXVhbCgzLCAnMycsICc9PSBjb2VyY2VzIHZhbHVlcyB0byBzdHJpbmdzJyk7XG4gICAqXG4gICAqIEBuYW1lIGVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIHZhciB0ZXN0ID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmVxdWFsLCB0cnVlKTtcblxuICAgIHRlc3QuYXNzZXJ0KFxuICAgICAgICBleHAgPT0gZmxhZyh0ZXN0LCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3thY3R9J1xuICAgICAgLCBleHBcbiAgICAgICwgYWN0XG4gICAgICAsIHRydWVcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGluZXF1YWxpdHkgKGAhPWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEVxdWFsKDMsIDQsICd0aGVzZSBudW1iZXJzIGFyZSBub3QgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgbm90RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RXF1YWwsIHRydWUpO1xuXG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIGV4cCAhPSBmbGFnKHRlc3QsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH0nXG4gICAgICAsIGV4cFxuICAgICAgLCBhY3RcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHN0cmljdCBlcXVhbGl0eSAoYD09PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHRydWUsICd0aGVzZSBib29sZWFucyBhcmUgc3RyaWN0bHkgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgc3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LnN0cmljdEVxdWFsLCB0cnVlKS50by5lcXVhbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBzdHJpY3QgaW5lcXVhbGl0eSAoYCE9PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKDMsICczJywgJ25vIGNvZXJjaW9uIGZvciBzdHJpY3QgZXF1YWxpdHknKTtcbiAgICpcbiAgICogQG5hbWUgbm90U3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLCB0cnVlKS50by5ub3QuZXF1YWwoZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGFjdHVhbGAgaXMgZGVlcGx5IGVxdWFsIHRvIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcEVxdWFsKHsgdGVhOiAnZ3JlZW4nIH0sIHsgdGVhOiAnZ3JlZW4nIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwRXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhbGlhcyBkZWVwU3RyaWN0RXF1YWxcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydCB0aGF0IGBhY3R1YWxgIGlzIG5vdCBkZWVwbHkgZXF1YWwgdG8gYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwRXF1YWwoeyB0ZWE6ICdncmVlbicgfSwgeyB0ZWE6ICdqYXNtaW5lJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcEVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RGVlcEVxdWFsLCB0cnVlKS50by5ub3QuZXFsKGV4cCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQWJvdmUodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBYm92ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAoPikgYHZhbHVlVG9CZUFib3ZlYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0Fib3ZlKDUsIDIsICc1IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAyJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQWJvdmVcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUFib3ZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Fib3ZlID0gZnVuY3Rpb24gKHZhbCwgYWJ2LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBYm92ZSwgdHJ1ZSkudG8uYmUuYWJvdmUoYWJ2KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdExlYXN0KHZhbHVlVG9DaGVjaywgdmFsdWVUb0JlQXRMZWFzdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAoPj0pIGB2YWx1ZVRvQmVBdExlYXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TGVhc3QoNSwgMiwgJzUgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAyJyk7XG4gICAqICAgICBhc3NlcnQuaXNBdExlYXN0KDMsIDMsICczIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0F0TGVhc3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUF0TGVhc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uICh2YWwsIGF0bHN0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQmVsb3codmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVCZWxvdywgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGxlc3MgdGhhbiAoPCkgYHZhbHVlVG9CZUJlbG93YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0JlbG93KDMsIDYsICczIGlzIHN0cmljdGx5IGxlc3MgdGhhbiA2Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQmVsb3dcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUJlbG93XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0JlbG93ID0gZnVuY3Rpb24gKHZhbCwgYmx3LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCZWxvdywgdHJ1ZSkudG8uYmUuYmVsb3coYmx3KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdE1vc3QodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBdE1vc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBgdmFsdWVUb0NoZWNrYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKDw9KSBgdmFsdWVUb0JlQXRNb3N0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TW9zdCgzLCA2LCAnMyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNicpO1xuICAgKiAgICAgYXNzZXJ0LmlzQXRNb3N0KDQsIDQsICc0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXRNb3N0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9DaGVja1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQmVBdE1vc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRNb3N0ID0gZnVuY3Rpb24gKHZhbCwgYXRtc3QsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TW9zdCwgdHJ1ZSkudG8uYmUubW9zdChhdG1zdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNUcnVlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIHRydWUuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gdHJ1ZTtcbiAgICogICAgIGFzc2VydC5pc1RydWUodGVhU2VydmVkLCAndGhlIHRlYSBoYXMgYmVlbiBzZXJ2ZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNUcnVlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc1RydWUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1sndHJ1ZSddO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90VHJ1ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgdHJ1ZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RUcnVlKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90VHJ1ZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RUcnVlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90VHJ1ZSwgdHJ1ZSkudG8ubm90LmVxdWFsKHRydWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRmFsc2UodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgZmFsc2UuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gZmFsc2U7XG4gICAqICAgICBhc3NlcnQuaXNGYWxzZSh0ZWFTZXJ2ZWQsICdubyB0ZWEgeWV0PyBobW0uLi4nKTtcbiAgICpcbiAgICogQG5hbWUgaXNGYWxzZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1snZmFsc2UnXTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEZhbHNlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCBmYWxzZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RGYWxzZSh0ZWEsICdncmVhdCwgdGltZSBmb3IgdGVhIScpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEZhbHNlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOdWxsKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG51bGwuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOdWxsKGVyciwgJ3RoZXJlIHdhcyBubyBlcnJvcicpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bGxcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TnVsbCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgbnVsbC5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3ROdWxsKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVsbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVsbCwgdHJ1ZSkudG8ubm90LmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTmFOXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB2YWx1ZSBpcyBOYU4uXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOYU4oTmFOLCAnTmFOIGlzIE5hTicpO1xuICAgKlxuICAgKiBAbmFtZSBpc05hTlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOYU4sIHRydWUpLnRvLmJlLk5hTjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE5hTlxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdmFsdWUgaXMgbm90IE5hTi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdE5hTig0LCAnNCBpcyBub3QgTmFOJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TmFOXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuICBhc3NlcnQuaXNOb3ROYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROYU4sIHRydWUpLm5vdC50by5iZS5OYU47XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciBmb28gPSAnaGknO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmV4aXN0cyhmb28sICdmb28gaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgJyk7XG4gICAqXG4gICAqIEBuYW1lIGV4aXN0c1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXhpc3RzID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmV4aXN0cywgdHJ1ZSkudG8uZXhpc3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVpdGhlciBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgYmFyID0gbnVsbFxuICAgKiAgICAgICAsIGJhejtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmFyKTtcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmF6LCAnYmF6IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RFeGlzdHNcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEV4aXN0cyA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RFeGlzdHMsIHRydWUpLnRvLm5vdC5leGlzdDtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1VuZGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciB0ZWE7XG4gICAqICAgICBhc3NlcnQuaXNVbmRlZmluZWQodGVhLCAnbm8gdGVhIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNVbmRlZmluZWRcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVW5kZWZpbmVkLCB0cnVlKS50by5lcXVhbCh1bmRlZmluZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgdGVhID0gJ2N1cCBvZiBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc0RlZmluZWQodGVhLCAndGVhIGhhcyBiZWVuIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNEZWZpbmVkXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNEZWZpbmVkLCB0cnVlKS50by5ub3QuZXF1YWwodW5kZWZpbmVkKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Z1bmN0aW9uKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBzZXJ2ZVRlYSgpIHsgcmV0dXJuICdjdXAgb2YgdGVhJzsgfTtcbiAgICogICAgIGFzc2VydC5pc0Z1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGNhbiBoYXZlIHRlYSBub3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXNGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Z1bmN0aW9uLCB0cnVlKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnVuY3Rpb24odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBmdW5jdGlvbi5cbiAgICpcbiAgICogICAgIHZhciBzZXJ2ZVRlYSA9IFsgJ2hlYXQnLCAncG91cicsICdzaXAnIF07XG4gICAqICAgICBhc3NlcnQuaXNOb3RGdW5jdGlvbihzZXJ2ZVRlYSwgJ2dyZWF0LCB3ZSBoYXZlIGxpc3RlZCB0aGUgc3RlcHMnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEZ1bmN0aW9uLCB0cnVlKS50by5ub3QuYmUuYSgnZnVuY3Rpb24nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc09iamVjdCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBvYmplY3Qgb2YgdHlwZSAnT2JqZWN0JyAoYXMgcmV2ZWFsZWQgYnkgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgKS5cbiAgICogX1RoZSBhc3NlcnRpb24gZG9lcyBub3QgbWF0Y2ggc3ViY2xhc3NlZCBvYmplY3RzLl9cbiAgICpcbiAgICogICAgIHZhciBzZWxlY3Rpb24gPSB7IG5hbWU6ICdDaGFpJywgc2VydmU6ICd3aXRoIHNwaWNlcycgfTtcbiAgICogICAgIGFzc2VydC5pc09iamVjdChzZWxlY3Rpb24sICd0ZWEgc2VsZWN0aW9uIGlzIGFuIG9iamVjdCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc09iamVjdFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNPYmplY3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPYmplY3QsIHRydWUpLnRvLmJlLmEoJ29iamVjdCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90T2JqZWN0KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGFuIG9iamVjdCBvZiB0eXBlICdPYmplY3QnIChhcyByZXZlYWxlZCBieSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2ApLlxuICAgKlxuICAgKiAgICAgdmFyIHNlbGVjdGlvbiA9ICdjaGFpJ1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KHNlbGVjdGlvbiwgJ3RlYSBzZWxlY3Rpb24gaXMgbm90IGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KG51bGwsICdudWxsIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPYmplY3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2JqZWN0ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2JqZWN0LCB0cnVlKS50by5ub3QuYmUuYSgnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNBcnJheSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBhcnJheS5cbiAgICpcbiAgICogICAgIHZhciBtZW51ID0gWyAnZ3JlZW4nLCAnY2hhaScsICdvb2xvbmcnIF07XG4gICAqICAgICBhc3NlcnQuaXNBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0FycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90QXJyYXkodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYW4gYXJyYXkuXG4gICAqXG4gICAqICAgICB2YXIgbWVudSA9ICdncmVlbnxjaGFpfG9vbG9uZyc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEFycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEFycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90QXJyYXksIHRydWUpLnRvLm5vdC5iZS5hbignYXJyYXknKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1N0cmluZyh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciB0ZWFPcmRlciA9ICdjaGFpJztcbiAgICogICAgIGFzc2VydC5pc1N0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1N0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNTdHJpbmcsIHRydWUpLnRvLmJlLmEoJ3N0cmluZycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90U3RyaW5nKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGEgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYU9yZGVyID0gNDtcbiAgICogICAgIGFzc2VydC5pc05vdFN0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdFN0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RTdHJpbmcsIHRydWUpLnRvLm5vdC5iZS5hKCdzdHJpbmcnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc051bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gMjtcbiAgICogICAgIGFzc2VydC5pc051bWJlcihjdXBzLCAnaG93IG1hbnkgY3VwcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bWJlclxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKCdudW1iZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE51bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gJzIgY3VwcyBwbGVhc2UnO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90TnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVtYmVyXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoJ251bWJlcicpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5pc0Zpbml0ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIuIFVubGlrZSBgLmlzTnVtYmVyYCwgdGhpcyB3aWxsIGZhaWwgZm9yIGBOYU5gIGFuZCBgSW5maW5pdHlgLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAyO1xuICAgKiAgICAgYXNzZXJ0LmlzRmluaXRlKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNGaW5pdGUoTmFOKTsgLy8gdGhyb3dzXG4gICAqXG4gICAqIEBuYW1lIGlzRmluaXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGaW5pdGUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGaW5pdGUsIHRydWUpLnRvLmJlLmZpbml0ZTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Jvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gdHJ1ZVxuICAgKiAgICAgICAsIHRlYVNlcnZlZCA9IGZhbHNlO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQm9vbGVhbih0ZWFSZWFkeSwgJ2lzIHRoZSB0ZWEgcmVhZHknKTtcbiAgICogICAgIGFzc2VydC5pc0Jvb2xlYW4odGVhU2VydmVkLCAnaGFzIHRlYSBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc0Jvb2xlYW5cbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Jvb2xlYW4sIHRydWUpLnRvLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEJvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gJ3llcCdcbiAgICogICAgICAgLCB0ZWFTZXJ2ZWQgPSAnbm9wZSc7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RCb29sZWFuKHRlYVJlYWR5LCAnaXMgdGhlIHRlYSByZWFkeScpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90Qm9vbGVhbih0ZWFTZXJ2ZWQsICdoYXMgdGVhIGJlZW4gc2VydmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90Qm9vbGVhblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC50eXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQudHlwZU9mKHsgdGVhOiAnY2hhaScgfSwgJ29iamVjdCcsICd3ZSBoYXZlIGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZihbJ2NoYWknLCAnamFzbWluZSddLCAnYXJyYXknLCAnd2UgaGF2ZSBhbiBhcnJheScpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZigndGVhJywgJ3N0cmluZycsICd3ZSBoYXZlIGEgc3RyaW5nJyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKC90ZWEvLCAncmVnZXhwJywgJ3dlIGhhdmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YobnVsbCwgJ251bGwnLCAnd2UgaGF2ZSBhIG51bGwnKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YodW5kZWZpbmVkLCAndW5kZWZpbmVkJywgJ3dlIGhhdmUgYW4gdW5kZWZpbmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIHR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQudHlwZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RUeXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIF9ub3RfIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90VHlwZU9mKCd0ZWEnLCAnbnVtYmVyJywgJ3N0cmluZ3MgYXJlIG5vdCBudW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZW9mIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RUeXBlT2YsIHRydWUpLnRvLm5vdC5iZS5hKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlT2Yob2JqZWN0LCBjb25zdHJ1Y3RvciwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFRlYSgnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBhbiBpbnN0YW5jZSBvZiB0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgaW5zdGFuY2VPZlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5zdGFuY2VPZihvYmplY3QsIGNvbnN0cnVjdG9yLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlYCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIHZhciBUZWEgPSBmdW5jdGlvbiAobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG4gICAqICAgICAgICwgY2hhaSA9IG5ldyBTdHJpbmcoJ2NoYWknKTtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbnN0YW5jZU9mKGNoYWksIFRlYSwgJ2NoYWkgaXMgbm90IGFuIGluc3RhbmNlIG9mIHRlYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbnN0YW5jZU9mXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluc3RhbmNlT2YgPSBmdW5jdGlvbiAodmFsLCB0eXBlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90SW5zdGFuY2VPZiwgdHJ1ZSlcbiAgICAgIC50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBoYXlzdGFja2AgaW5jbHVkZXMgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGVcbiAgICogaW5jbHVzaW9uIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXksIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nLCBvciBhIHN1YnNldCBvZlxuICAgKiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKFsxLDIsM10sIDIsICdhcnJheSBjb250YWlucyB2YWx1ZScpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoJ2Zvb2JhcicsICdmb28nLCAnc3RyaW5nIGNvbnRhaW5zIHN1YnN0cmluZycpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoeyBmb286ICdiYXInLCBoZWxsbzogJ3VuaXZlcnNlJyB9LCB7IGZvbzogJ2JhcicgfSwgJ29iamVjdCBjb250YWlucyBwcm9wZXJ0eScpO1xuICAgKlxuICAgKiBTdHJpY3QgZXF1YWxpdHkgKD09PSkgaXMgdXNlZC4gV2hlbiBhc3NlcnRpbmcgdGhlIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluXG4gICAqIGFuIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgZm9yIGFuIGVsZW1lbnQgdGhhdCdzIHN0cmljdGx5IGVxdWFsIHRvIHRoZVxuICAgKiBnaXZlbiB2YWx1ZS4gV2hlbiBhc3NlcnRpbmcgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhbiBvYmplY3QsIHRoZSBvYmplY3RcbiAgICogaXMgc2VhcmNoZWQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBrZXlzLCBjaGVja2luZyB0aGF0IGVhY2ggb25lIGlzIHByZXNlbnRcbiAgICogYW5kIHN0cmljdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZS4gRm9yIGluc3RhbmNlOlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoW29iajEsIG9iajJdLCBvYmoxKTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajF9KTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajEsIGJhcjogb2JqMn0pO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGRvZXMgbm90IGluY2x1ZGUgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydFxuICAgKiB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuIGFycmF5LCBhIHN1YnN0cmluZyBpbiBhIHN0cmluZywgb3IgYSBzdWJzZXQgb2ZcbiAgICogcHJvcGVydGllcyBpbiBhbiBvYmplY3QuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZShbMSwyLDNdLCA0LCBcImFycmF5IGRvZXNuJ3QgY29udGFpbiB2YWx1ZVwiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKCdmb29iYXInLCAnYmF6JywgXCJzdHJpbmcgZG9lc24ndCBjb250YWluIHN1YnN0cmluZ1wiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHsgZm9vOiAnYmFyJywgaGVsbG86ICd1bml2ZXJzZScgfSwgeyBmb286ICdiYXonIH0sICdvYmplY3QgZG9lc24ndCBjb250YWluIHByb3BlcnR5Jyk7XG4gICAqXG4gICAqIFN0cmljdCBlcXVhbGl0eSAoPT09KSBpcyB1c2VkLiBXaGVuIGFzc2VydGluZyB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuXG4gICAqIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgdG8gY29uZmlybSB0aGUgYWJzZW5jZSBvZiBhbiBlbGVtZW50IHRoYXQnc1xuICAgKiBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuIFdoZW4gYXNzZXJ0aW5nIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW5cbiAgICogYW4gb2JqZWN0LCB0aGUgb2JqZWN0IGlzIHNlYXJjaGVkIHRvIGNvbmZpcm0gdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuXG4gICAqIHByb3BlcnR5IGtleXMgaXMgZWl0aGVyIG5vdCBwcmVzZW50IG9yIG5vdCBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW5cbiAgICogcHJvcGVydHkgdmFsdWUuIEZvciBpbnN0YW5jZTpcbiAgICpcbiAgICogICAgIHZhciBvYmoxID0ge2E6IDF9XG4gICAqICAgICAgICwgb2JqMiA9IHtiOiAyfTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDF9KTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzogb2JqMSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZVxuICAgKiBAcGFyYW0ge0FycmF5fFN0cmluZ30gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGluY2x1ZGVzIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlXG4gICAqIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluIGFuIGFycmF5IG9yIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgKiBEZWVwIGVxdWFsaXR5IGlzIHVzZWQuXG4gICAqXG4gICAqICAgICB2YXIgb2JqMSA9IHthOiAxfVxuICAgKiAgICAgICAsIG9iajIgPSB7YjogMn07XG4gICAqICAgICBhc3NlcnQuZGVlcEluY2x1ZGUoW29iajEsIG9iajJdLCB7YTogMX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcEluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGhheXN0YWNrYCBkb2VzIG5vdCBpbmNsdWRlIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnRcbiAgICogdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBhbiBhcnJheSBvciBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICogRGVlcCBlcXVhbGl0eSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDl9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogOX19KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogMX0sIGJhcjoge2I6IDl9fSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBJbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkSW5jbHVkZSh7Jy5hJzogeydiJzogJ3gnfX0sIHsnXFxcXC5hLltiXSc6ICd4J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3gnfSk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5uZXN0ZWRJbmNsdWRlLCB0cnVlKS5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE5lc3RlZEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBkb2VzIG5vdCBpbmNsdWRlICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3QuXG4gICAqIEVuYWJsZXMgdGhlIHVzZSBvZiBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciByZWZlcmVuY2luZyBuZXN0ZWRcbiAgICogcHJvcGVydGllcy5cbiAgICogJ1tdJyBhbmQgJy4nIGluIHByb3BlcnR5IG5hbWVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIGRvdWJsZSBiYWNrc2xhc2hlcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J2InOiAneCd9fSwgeydcXFxcLmEuYic6ICd5J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3knfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBOZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUoe2E6IHtiOiBbe3g6IDF9XX19LCB7J2EuYlswXSc6IHt4OiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt4OiAxfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwTmVzdGVkSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGRvZXMgbm90IGluY2x1ZGUgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgYWJzZW5jZSBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIHJlZmVyZW5jaW5nIG5lc3RlZFxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiAnW10nIGFuZCAnLicgaW4gcHJvcGVydHkgbmFtZXMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgZG91YmxlIGJhY2tzbGFzaGVzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHthOiB7YjogW3t4OiAxfV19fSwgeydhLmJbMF0nOiB7eTogMX19KVxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt5OiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGluY2x1c2lvbiBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBpZ25vcmluZyBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25JbmNsdWRlKHsgYTogMSB9LCB7IGE6IDEgfSk7XG4gICAqXG4gICAqIEBuYW1lIG93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm93bkluY2x1ZGUsIHRydWUpLm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90T3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICAgICBPYmplY3QucHJvdG90eXBlLmIgPSAyO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93bkluY2x1ZGUoeyBhOiAxIH0sIHsgYjogMiB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90T3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBpbmNsdXNpb24gb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKlxuICAgKiAgICAgIGFzc2VydC5kZWVwT3duSW5jbHVkZSh7YToge2I6IDJ9fSwge2E6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwT3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAubm90RGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBhYnNlbmNlIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGlnbm9yaW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFuZCBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICpcbiAgICogICAgICBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUoe2E6IHtiOiAyfX0sIHthOiB7YzogM319KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcE93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSlcbiAgICAgIC5ub3QuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm1hdGNoKHZhbHVlLCByZWdleHAsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGByZWdleHBgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm1hdGNoKCdmb29iYXInLCAvXmZvby8sICdyZWdleHAgbWF0Y2hlcycpO1xuICAgKlxuICAgKiBAbmFtZSBtYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RNYXRjaCh2YWx1ZSwgcmVnZXhwLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGRvZXMgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBkb2VzIG5vdCBtYXRjaCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RNYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TWF0Y2gsIHRydWUpLnRvLm5vdC5tYXRjaChyZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAucHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYScpO1xuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5wcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgIHdpdGggYSB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrXG4gICAqICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5VmFsKHsgdGVhOiAnaXMgZ29vZCcgfSwgJ3RlYScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZFxuICAgKiBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVja1xuICAgKiAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCh7IHRlYTogJ2lzIGdvb2QnIH0sICd0ZWEnLCAnaXMgYmFkJyk7XG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHlWYWwoeyB0ZWE6ICdpcyBnb29kJyB9LCAnY29mZmVlJywgJ2lzIGdvb2QnKTtcbiAgICpcbiAgICogQG5hbWUgbm90UHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCB3aXRoIGEgdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAgd2l0aCB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgYmxhY2s6ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBncmVlbjogJ29vbG9uZycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICdjb2ZmZWUnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLiBJbmhlcml0ZWRcbiAgICogcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICd0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgb3duUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93blByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCh7IGNvZmZlZTogJ2lzIGdvb2QnfSwgJ2NvZmZlZScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIG93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3QgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YFxuICAgKiB3aXRoIGEgdmFsdWUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGB2YWx1ZWAuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2tcbiAgICogKD09PSkuIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsKHsgdGVhOiAnaXMgYmV0dGVyJ30sICd0ZWEnLCAnaXMgd29yc2UnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay4gSW5oZXJpdGVkXG4gICAqIHByb3BlcnRpZXMgYXJlbid0IGNoZWNrZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgXG4gICAqIHdpdGggYSB2YWx1ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBibGFjazogJ21hdGNoYScgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnb29sb25nJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ2NvZmZlZScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBPd25Qcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5lc3RlZFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCwgd2hpY2ggY2FuIGJlIGEgc3RyaW5nIHVzaW5nIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yXG4gICAqIG5lc3RlZCByZWZlcmVuY2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkUHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJyk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLCB3aGljaFxuICAgKiBjYW4gYmUgYSBzdHJpbmcgdXNpbmcgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgbmVzdGVkIHJlZmVyZW5jZS4gVGhlXG4gICAqIHByb3BlcnR5IGNhbm5vdCBleGlzdCBvbiB0aGUgb2JqZWN0IG5vciBhbnl3aGVyZSBpbiBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5vb2xvbmcnKTtcbiAgICpcbiAgICogQG5hbWUgbm90TmVzdGVkUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdtYXRjaGEnKTtcbiAgICpcbiAgICogQG5hbWUgbmVzdGVkUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdrb25hY2hhJyk7XG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlLmdyZWVuJywgJ21hdGNoYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3ROZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwTmVzdGVkUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAgd2l0aCBhIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVtJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE5lc3RlZFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgb29sb25nOiAneXVtJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVjaycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiB7IG1hdGNoYTogJ3l1bScgfSB9IH0sICd0ZWEuYmxhY2snLCB7IG1hdGNoYTogJ3l1bScgfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5sZW5ndGhPZihvYmplY3QsIGxlbmd0aCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgYGxlbmd0aGAgb3IgYHNpemVgIHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKFsxLDIsM10sIDMsICdhcnJheSBoYXMgbGVuZ3RoIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZignZm9vYmFyJywgNiwgJ3N0cmluZyBoYXMgbGVuZ3RoIG9mIDYnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgU2V0KFsxLDIsM10pLCAzLCAnc2V0IGhhcyBzaXplIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgTWFwKFtbJ2EnLDFdLFsnYicsMl0sWydjJywzXV0pLCAzLCAnbWFwIGhhcyBzaXplIG9mIDMnKTtcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24gKGV4cCwgbGVuLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5oYXNBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ2ZvbycsICdpRG9udEV4aXN0JywgJ2JheiddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGlEb250RXhpc3Q6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSksIFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10pO1xuICAgKlxuICAgKiBAbmFtZSBoYXNBbnlLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaGFzQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBhbmQgb25seSBhbGwgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGhhc0FsbEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmhhc0FsbEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkIGJ1dCBtYXkgaGF2ZSBtb3JlIGtleXMgbm90IGxpc3RlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydmb28nLCAnYmF6J10pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGJhejogMTMzN30pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe2ZvbzogJ2Jhcid9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGNvbnRhaW5zQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY29udGFpbnNBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdEhhdmVBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgbm9uZSBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ29uZScsICd0d28nLCAnZXhhbXBsZSddKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCB7b25lOiAxLCB0d286IDIsIGV4YW1wbGU6ICdmb28nfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyhuZXcgU2V0KFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10sIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueUtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYW55LmtleXMoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90SGF2ZUFsbEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnb25lJywgJ3R3bycsICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtvbmU6IDEsIHR3bzogMiwgZXhhbXBsZTogJ2Zvbyd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmhhc0FueURlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXSwgWzEsIDJdXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0aHJlZTogJ3RocmVlJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQW55RGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmhhc0FsbERlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYWxsIGFuZCBvbmx5IGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ31dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGNvbnRhaW5zIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHtvbmU6ICdvbmUnfSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgY29udGFpbnNBbGxEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQW55RGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBub25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7dHdlbnR5OiAndHdlbnR5J30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwgW3t0d2VudHk6ICd0d2VudHknfSwge2ZpZnR5OiAnZmlmdHknfV0pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueURlZXBLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7b25lOiAnb25lJ31dKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHt0d2VudHk6ICd0d2VudHknfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAudGhyb3dzKGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgJ0Vycm9yIHRocm93biBtdXN0IGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIC9FcnJvciB0aHJvd24gbXVzdCBoYXZlIGEgbXNnIHRoYXQgbWF0Y2hlcyB0aGlzLyk7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBlcnJvckluc3RhbmNlKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAnRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgaGF2ZSB0aGlzIG1zZycpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAvRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgbWF0Y2ggdGhpcy8pO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgL0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIG1hdGNoIHRoaXMvKTtcbiAgICpcbiAgICogQG5hbWUgdGhyb3dzXG4gICAqIEBhbGlhcyB0aHJvd1xuICAgKiBAYWxpYXMgVGhyb3dcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfEVycm9yfSBlcnJvckxpa2VcbiAgICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBlcnJNc2dNYXRjaGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uIChmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgYXNzZXJ0RXJyID0gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQudGhyb3dzLCB0cnVlKVxuICAgICAgLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gICAgcmV0dXJuIGZsYWcoYXNzZXJ0RXJyLCAnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdFRocm93KGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCBfbm90XyB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyBfbm90XyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgX25vdF8gaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgJ0FueSBFcnJvciB0aHJvd24gbXVzdCBub3QgaGF2ZSB0aGlzIG1lc3NhZ2UnKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIC9BbnkgRXJyb3IgdGhyb3duIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIEVycm9yKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgRXJyb3IsICdFcnJvciBtdXN0IG5vdCBoYXZlIHRoaXMgbWVzc2FnZScpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIG11c3Qgbm90IGhhdmUgdGhpcyBtZXNzYWdlJyk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCBFcnJvciwgL0Vycm9yIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UsIC9FcnJvciBtdXN0IG5vdCBtYXRjaCB0aGlzLyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RUaHJvd1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge0Vycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGVyck1zZ01hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgICBlcnJvckxpa2UgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RUaHJvdywgdHJ1ZSlcbiAgICAgIC50by5ub3QudGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5vcGVyYXRvcih2YWwxLCBvcGVyYXRvciwgdmFsMiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBDb21wYXJlcyB0d28gdmFsdWVzIHVzaW5nIGBvcGVyYXRvcmAuXG4gICAqXG4gICAqICAgICBhc3NlcnQub3BlcmF0b3IoMSwgJzwnLCAyLCAnZXZlcnl0aGluZyBpcyBvaycpO1xuICAgKiAgICAgYXNzZXJ0Lm9wZXJhdG9yKDEsICc+JywgMiwgJ3RoaXMgd2lsbCBmYWlsJyk7XG4gICAqXG4gICAqIEBuYW1lIG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9wZXJhdG9yID0gZnVuY3Rpb24gKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICAgIHZhciBvaztcbiAgICBzd2l0Y2gob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJz09JzpcbiAgICAgICAgb2sgPSB2YWwgPT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc9PT0nOlxuICAgICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc+JzpcbiAgICAgICAgb2sgPSB2YWwgPiB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgb2sgPSB2YWwgPj0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgb2sgPSB2YWwgPD0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIG9rID0gdmFsICE9IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnIT09JzpcbiAgICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbXNnID0gbXNnID8gbXNnICsgJzogJyA6IG1zZztcbiAgICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgbXNnICsgJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhc3NlcnQub3BlcmF0b3JcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG9rLCBtc2csIGFzc2VydC5vcGVyYXRvciwgdHJ1ZSk7XG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIHRydWUgPT09IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAnICsgdXRpbC5pbnNwZWN0KHZhbCkgKyAnIHRvIGJlICcgKyBvcGVyYXRvciArICcgJyArIHV0aWwuaW5zcGVjdCh2YWwyKVxuICAgICAgLCAnZXhwZWN0ZWQgJyArIHV0aWwuaW5zcGVjdCh2YWwpICsgJyB0byBub3QgYmUgJyArIG9wZXJhdG9yICsgJyAnICsgdXRpbC5pbnNwZWN0KHZhbDIpICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuY2xvc2VUbyhhY3R1YWwsIGV4cGVjdGVkLCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCBgZXhwZWN0ZWRgLCB0byB3aXRoaW4gYSArLy0gYGRlbHRhYCByYW5nZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5jbG9zZVRvKDEuNSwgMSwgMC41LCAnbnVtYmVycyBhcmUgY2xvc2UnKTtcbiAgICpcbiAgICogQG5hbWUgY2xvc2VUb1xuICAgKiBAcGFyYW0ge051bWJlcn0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNsb3NlVG8gPSBmdW5jdGlvbiAoYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuY2xvc2VUbywgdHJ1ZSkudG8uYmUuY2xvc2VUbyhleHAsIGRlbHRhKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5hcHByb3hpbWF0ZWx5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmFwcHJveGltYXRlbHkoMS41LCAxLCAwLjUsICdudW1iZXJzIGFyZSBjbG9zZScpO1xuICAgKlxuICAgKiBAbmFtZSBhcHByb3hpbWF0ZWx5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhY3R1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuYXBwcm94aW1hdGVseSA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5hcHByb3hpbWF0ZWx5LCB0cnVlKVxuICAgICAgLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5zYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAzIF0sICdzYW1lIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgc2FtZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90U2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci5cbiAgICogVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyA1LCAxLCAzIF0sICdub3Qgc2FtZSBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFNhbWVNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDFcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90U2FtZU1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfV0sICdzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVEZWVwTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLlxuICAgKiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFt7IGI6IDIgfSwgeyBhOiAxIH0sIHsgZjogNSB9XSwgJ25vdCBzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lT3JkZXJlZE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAxLCAyLCAzIF0sICdzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVPcmRlcmVkTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gdGhlIHNhbWVcbiAgICogb3JkZXIuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDMgXSwgJ25vdCBzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICogVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdzYW1lIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIHNhbWVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHNldDEsIHNldDIsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGRvbid0IGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZVxuICAgKiBvcmRlci4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgejogNSB9IF0sICdub3Qgc2FtZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfSBdLCAnbm90IHNhbWUgZGVlcCBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90U2FtZURlZXBPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS4gRHVwbGljYXRlcyBhcmUgaWdub3JlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAyIF0sICdpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEluY2x1ZGVNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDUsIDEgXSwgJ25vdCBpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaW5jbHVkZS5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXMgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYSBkZWVwXG4gICAqIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXNuJ3QgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYVxuICAgKiBkZWVwIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBmOiA1IH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMSwgMiBdLCAnaW5jbHVkZSBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMSBdLCAnbm90IGluY2x1ZGUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDMgXSwgJ25vdCBpbmNsdWRlIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpc24ndCBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgZjogNSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5vbmVPZihpbkxpc3QsIGxpc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IG5vbi1vYmplY3QsIG5vbi1hcnJheSB2YWx1ZSBgaW5MaXN0YCBhcHBlYXJzIGluIHRoZSBmbGF0IGFycmF5IGBsaXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vbmVPZigxLCBbIDIsIDEgXSwgJ05vdCBmb3VuZCBpbiBsaXN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIG9uZU9mXG4gICAqIEBwYXJhbSB7Kn0gaW5MaXN0XG4gICAqIEBwYXJhbSB7QXJyYXk8Kj59IGxpc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24gKGluTGlzdCwgbGlzdCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNoYW5nZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMjIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xuICB9XG5cbiAgIC8qKlxuICAgKiAjIyMgLmNoYW5nZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDIpO1xuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXNCeSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgbXNnID0gdG1wTXNnO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKVxuICAgICAgLnRvLmNoYW5nZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gICAvKipcbiAgICogIyMjIC5kb2VzTm90Q2hhbmdlKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnZm9vJyk7IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdENoYW5nZShmbiwgb2JqLCAndmFsJyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RDaGFuZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuY2hhbmdlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvciBvZiBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCArPSAxMCB9O1xuICAgKiAgICAgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeShmbiwgb2JqLCAndmFsJywgNSk7XG4gICAqXG4gICAqIEBuYW1lIGNoYW5nZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnksIHRydWUpXG4gICAgICAudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDEzIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDEwIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RJbmNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA4IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEluY3JlYXNlKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdEluY3JlYXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNyZWFzZShvYmosIHByb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jcmVhc2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGluY3JlYXNlIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgYnkgYW4gYW1vdW50IChkZWx0YSkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDE1IH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnV0Tm90QnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZGVjcmVhc2VzKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRlY3JlYXNlcyBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgLT0gNSB9O1xuICAgKiAgICAgYXNzZXJ0LmRlY3JlYXNlc0J5KGZuLCBvYmosICd2YWwnLCA1KTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3REZWNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMTUgfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90RGVjcmVhc2UoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90RGVjcmVhc2UgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpXG4gICAgICAudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90RGVjcmVhc2VCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCdXROb3RCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkZWNyZWFzZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKiFcbiAgICogIyMjIC5pZkVycm9yKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyBpZiB2YWx1ZSBpcyBub3QgYSBmYWxzZSB2YWx1ZSwgYW5kIHRocm93cyBpZiBpdCBpcyBhIHRydWUgdmFsdWUuXG4gICAqIFRoaXMgaXMgYWRkZWQgdG8gYWxsb3cgZm9yIGNoYWkgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBOb2RlJ3NcbiAgICogYXNzZXJ0IGNsYXNzLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignSSBhbSBhIGN1c3RvbSBlcnJvcicpO1xuICAgKiAgICAgYXNzZXJ0LmlmRXJyb3IoZXJyKTsgLy8gUmV0aHJvd3MgZXJyIVxuICAgKlxuICAgKiBAbmFtZSBpZkVycm9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhyb3codmFsKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNFeHRlbnNpYmxlKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGV4dGVuc2libGUgKGNhbiBoYXZlIG5ldyBwcm9wZXJ0aWVzIGFkZGVkIHRvIGl0KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0V4dGVuc2libGUoe30pO1xuICAgKlxuICAgKiBAbmFtZSBpc0V4dGVuc2libGVcbiAgICogQGFsaWFzIGV4dGVuc2libGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiAob2JqLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RXh0ZW5zaWJsZShvYmplY3QpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBpcyBfbm90XyBleHRlbnNpYmxlLlxuICAgKlxuICAgKiAgICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgKiAgICAgdmFyIHNlYWxlZE9iamVjdCA9IE9iamVjdC5zZWFsKHt9KTtcbiAgICogICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEV4dGVuc2libGUobm9uRXh0ZW5zaWJsZU9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RXh0ZW5zaWJsZVxuICAgKiBAYWxpYXMgbm90RXh0ZW5zaWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzU2VhbGVkKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHNlYWxlZCAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSByZW1vdmVkKS5cbiAgICpcbiAgICogICAgIHZhciBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSk7XG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzU2VhbGVkKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNTZWFsZWQoZnJvemVuT2JqZWN0KTtcbiAgICpcbiAgICogQG5hbWUgaXNTZWFsZWRcbiAgICogQGFsaWFzIHNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzU2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzU2VhbGVkLCB0cnVlKS50by5iZS5zZWFsZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RTZWFsZWQob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgX25vdF8gc2VhbGVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90U2VhbGVkKHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RTZWFsZWRcbiAgICogQGFsaWFzIG5vdFNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90U2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90U2VhbGVkLCB0cnVlKS50by5ub3QuYmUuc2VhbGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZyb3plbiAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBtb2RpZmllZCkuXG4gICAqXG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAqICAgICBhc3NlcnQuZnJvemVuKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzRnJvemVuXG4gICAqIEBhbGlhcyBmcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Zyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0Zyb3plbiwgdHJ1ZSkudG8uYmUuZnJvemVuO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIF9ub3RfIGZyb3plbi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEZyb3plbih7fSk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RnJvemVuXG4gICAqIEBhbGlhcyBub3RGcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEZyb3plbiwgdHJ1ZSkudG8ubm90LmJlLmZyb3plbjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0VtcHR5KHRhcmdldClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgZG9lcyBub3QgY29udGFpbiBhbnkgdmFsdWVzLlxuICAgKiBGb3IgYXJyYXlzIGFuZCBzdHJpbmdzLCBpdCBjaGVja3MgdGhlIGBsZW5ndGhgIHByb3BlcnR5LlxuICAgKiBGb3IgYE1hcGAgYW5kIGBTZXRgIGluc3RhbmNlcywgaXQgY2hlY2tzIHRoZSBgc2l6ZWAgcHJvcGVydHkuXG4gICAqIEZvciBub24tZnVuY3Rpb24gb2JqZWN0cywgaXQgZ2V0cyB0aGUgY291bnQgb2Ygb3duXG4gICAqIGVudW1lcmFibGUgc3RyaW5nIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShbXSk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eSgnJyk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShuZXcgTWFwKTtcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNFbXB0eVxuICAgKiBAYWxpYXMgZW1wdHlcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl8U3RyaW5nfE1hcHxTZXR9IHRhcmdldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RFbXB0eSh0YXJnZXQpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGNvbnRhaW5zIHZhbHVlcy5cbiAgICogRm9yIGFycmF5cyBhbmQgc3RyaW5ncywgaXQgY2hlY2tzIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eS5cbiAgICogRm9yIGBNYXBgIGFuZCBgU2V0YCBpbnN0YW5jZXMsIGl0IGNoZWNrcyB0aGUgYHNpemVgIHByb3BlcnR5LlxuICAgKiBGb3Igbm9uLWZ1bmN0aW9uIG9iamVjdHMsIGl0IGdldHMgdGhlIGNvdW50IG9mIG93blxuICAgKiBlbnVtZXJhYmxlIHN0cmluZyBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkoWzEsIDJdKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KCczNCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkobmV3IFNldChbNSwgNl0pKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KHsga2V5OiA3IH0pO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEVtcHR5XG4gICAqIEBhbGlhcyBub3RFbXB0eVxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheXxTdHJpbmd8TWFwfFNldH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEVtcHR5LCB0cnVlKS50by5ub3QuYmUuZW1wdHk7XG4gIH07XG5cbiAgLyohXG4gICAqIEFsaWFzZXMuXG4gICAqL1xuXG4gIChmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcyl7XG4gICAgYXNzZXJ0W2FzXSA9IGFzc2VydFtuYW1lXTtcbiAgICByZXR1cm4gYWxpYXM7XG4gIH0pXG4gICgnaXNPaycsICdvaycpXG4gICgnaXNOb3RPaycsICdub3RPaycpXG4gICgndGhyb3dzJywgJ3Rocm93JylcbiAgKCd0aHJvd3MnLCAnVGhyb3cnKVxuICAoJ2lzRXh0ZW5zaWJsZScsICdleHRlbnNpYmxlJylcbiAgKCdpc05vdEV4dGVuc2libGUnLCAnbm90RXh0ZW5zaWJsZScpXG4gICgnaXNTZWFsZWQnLCAnc2VhbGVkJylcbiAgKCdpc05vdFNlYWxlZCcsICdub3RTZWFsZWQnKVxuICAoJ2lzRnJvemVuJywgJ2Zyb3plbicpXG4gICgnaXNOb3RGcm96ZW4nLCAnbm90RnJvemVuJylcbiAgKCdpc0VtcHR5JywgJ2VtcHR5JylcbiAgKCdpc05vdEVtcHR5JywgJ25vdEVtcHR5Jyk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciB1c2VkID0gW107XG5cbi8qIVxuICogQ2hhaSB2ZXJzaW9uXG4gKi9cblxuZXhwb3J0cy52ZXJzaW9uID0gJzQuMy44JztcblxuLyohXG4gKiBBc3NlcnRpb24gRXJyb3JcbiAqL1xuXG5leHBvcnRzLkFzc2VydGlvbkVycm9yID0gcmVxdWlyZSgnYXNzZXJ0aW9uLWVycm9yJyk7XG5cbi8qIVxuICogVXRpbHMgZm9yIHBsdWdpbnMgKG5vdCBleHBvcnRlZClcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vY2hhaS91dGlscycpO1xuXG4vKipcbiAqICMgLnVzZShmdW5jdGlvbilcbiAqXG4gKiBQcm92aWRlcyBhIHdheSB0byBleHRlbmQgdGhlIGludGVybmFscyBvZiBDaGFpLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAcmV0dXJucyB7dGhpc30gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG59O1xuXG4vKiFcbiAqIFV0aWxpdHkgRnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0cy51dGlsID0gdXRpbDtcblxuLyohXG4gKiBDb25maWd1cmF0aW9uXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY2hhaS9jb25maWcnKTtcbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG4vKiFcbiAqIFByaW1hcnkgYEFzc2VydGlvbmAgcHJvdG90eXBlXG4gKi9cblxudmFyIGFzc2VydGlvbiA9IHJlcXVpcmUoJy4vY2hhaS9hc3NlcnRpb24nKTtcbmV4cG9ydHMudXNlKGFzc2VydGlvbik7XG5cbi8qIVxuICogQ29yZSBBc3NlcnRpb25zXG4gKi9cblxudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NoYWkvY29yZS9hc3NlcnRpb25zJyk7XG5leHBvcnRzLnVzZShjb3JlKTtcblxuLyohXG4gKiBFeHBlY3QgaW50ZXJmYWNlXG4gKi9cblxudmFyIGV4cGVjdCA9IHJlcXVpcmUoJy4vY2hhaS9pbnRlcmZhY2UvZXhwZWN0Jyk7XG5leHBvcnRzLnVzZShleHBlY3QpO1xuXG4vKiFcbiAqIFNob3VsZCBpbnRlcmZhY2VcbiAqL1xuXG52YXIgc2hvdWxkID0gcmVxdWlyZSgnLi9jaGFpL2ludGVyZmFjZS9zaG91bGQnKTtcbmV4cG9ydHMudXNlKHNob3VsZCk7XG5cbi8qIVxuICogQXNzZXJ0IGludGVyZmFjZVxuICovXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCcuL2NoYWkvaW50ZXJmYWNlL2Fzc2VydCcpO1xuZXhwb3J0cy51c2UoYXNzZXJ0KTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2NoYWknKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmV4cG9ydCB7IHR5cGVPZiB9O1xuXG4vKipcbiAqIFRoZSBidWlsdC1pbiB0eXBlb2YgbWV0aG9kIGlzIGtub3duIHRvIGhhdmUgc29tZSBoaXN0b3JpY2FsIHdlYWtuZXNzZXMuIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcHJvdmlkZSBhIGJldHRlciBhbmQgbW9yZSBhY2N1cmF0ZSByZXN1bHQuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3R5cGVvZi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBtaXNtYXRjaFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAcGFyYW0gYXJnc1xuICovXG5mdW5jdGlvbiBleHRlbmQoLi4uYXJncykge1xuXHRsZXQgbztcblx0bGV0IGk7XG5cblx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9YCk7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGEgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKCEoaXNPYmplY3QoYSkgfHwgaXNBcnJheShhKSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhKX1gKTtcblx0XHR9XG5cblx0XHRpZiAobyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvID0gYTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgayBpbiBhKSB7XG5cdFx0XHRjb25zdCB2ID0gYT8uW2tdO1xuXG5cdFx0XHRpZiAodiA9PT0gbz8uW2tdKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKGlzT2JqZWN0KHYpICYmIHR5cGVPZih2KSA9PT0gXCJvYmplY3RcIikgfHwgaXNBcnJheSh2KSkge1xuXHRcdFx0XHRpZiAob1trXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0XHRcdG9ba10gPSBbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1trXSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodHlwZU9mKG9ba10pICE9PSB0eXBlT2YodikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0YHR5cGUgbWlzbWF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkob1trXSl9KCR7dHlwZU9mKFxuXHRcdFx0XHRcdFx0XHRcdG9ba10sXG5cdFx0XHRcdFx0XHRcdCl9KSAhPSAke0pTT04uc3RyaW5naWZ5KHYpfSgke3R5cGVPZih2KX0pYCxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob1trXSkpIHtcblx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0b1trXS5wdXNoKC4uLnYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1trXSA9IGV4dGVuZChvW2tdLCB2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG8pKSB7XG5cdFx0XHRcdFx0by5wdXNoKHYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9ba10gPSB2O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvO1xufVxuIiwgIi8vIGh0dHA6Ly93d3cucmFqZGVlcGQuY29tL2FydGljbGVzL2Nocm9tZS9sb2NhbHN0cmcvTG9jYWxTdG9yYWdlU2FtcGxlLmh0bVxuXG4vLyBOT1RFOlxuLy8gdGhpcyB2YXJpZXMgZnJvbSBhY3R1YWwgbG9jYWxTdG9yYWdlIGluIHNvbWUgc3VidGxlIHdheXNcblxuLy8gYWxzbywgdGhlcmUgaXMgbm8gcGVyc2lzdGVuY2Vcbi8vIFRPRE8gcGVyc2lzdFxuKGZ1bmN0aW9uICgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmdW5jdGlvbiBTdG9yYWdlKHBhdGgsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZGI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfYmtfX18nLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfc3RyaWN0X19fJywge1xuICAgICAgdmFsdWU6ICEhb3B0cy5zdHJpY3RcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl93c19fXycsIHtcbiAgICAgIHZhbHVlOiBvcHRzLndzIHx8ICcgICdcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBkYiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRiID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpc1trZXldID0gZGJba2V5XTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmdldEl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpc1trZXldID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgIHRoaXNba2V5XSA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWw7XG4gICAgfVxuICAgIHRoaXMuX19fc2F2ZV9fXygpO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gZmlsdGVycyBvdXQgcHJvdG90eXBlIGtleXNcbiAgICBPYmplY3Qua2V5cyhzZWxmKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHNlbGZba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG4gICAgfSk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpID0gaSB8fCAwO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKVtpXTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKS5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5fX19zYXZlX19fID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICghdGhpcy5fX19wcml2X2JrX19fLnBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fX19wcml2X2JrX19fLmxvY2spIHtcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy53YWl0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9fX3ByaXZfYmtfX18ubG9jayA9IHRydWU7XG4gICAgZnMud3JpdGVGaWxlKFxuICAgICAgdGhpcy5fX19wcml2X2JrX19fLnBhdGhcbiAgICAsIEpTT04uc3RyaW5naWZ5KHRoaXMsIG51bGwsIHRoaXMuX19fcHJpdl93c19fXylcbiAgICAsICd1dGY4J1xuICAgICwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHNlbGYuX19fcHJpdl9ia19fXy5sb2NrID0gZmFsc2U7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgd3JpdGUgdG8gZGF0YWJhc2UnLCBzZWxmLl9fX3ByaXZfYmtfX18ucGF0aCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCkge1xuICAgICAgICBzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCA9IGZhbHNlO1xuICAgICAgICBzZWxmLl9fX3NhdmVfX18oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZSwgJ2NyZWF0ZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHBhdGgsIG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShwYXRoLCBvcHRzKTtcbiAgICB9XG4gICwgd3JpdGFibGU6IGZhbHNlXG4gICwgZW51bWVyYWJsZTogZmFsc2VcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBTdG9yYWdlO1xufSgpKTtcbiIsICIoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCByZWZNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBoaWRkZW5JbnB1dE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaW50ZXJuYWxzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybXNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd0hvc3RzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHJlZlZhbHVlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB1cGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dSb290TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQW5jaG9yTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBkb2N1bWVudEZyYWdtZW50TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFja01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlVcGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IGFvbSA9IHtcbiAgICAgICAgYXJpYUF0b21pYzogJ2FyaWEtYXRvbWljJyxcbiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogJ2FyaWEtYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgYXJpYUJ1c3k6ICdhcmlhLWJ1c3knLFxuICAgICAgICBhcmlhQ2hlY2tlZDogJ2FyaWEtY2hlY2tlZCcsXG4gICAgICAgIGFyaWFDb2xDb3VudDogJ2FyaWEtY29sY291bnQnLFxuICAgICAgICBhcmlhQ29sSW5kZXg6ICdhcmlhLWNvbGluZGV4JyxcbiAgICAgICAgYXJpYUNvbEluZGV4VGV4dDogJ2FyaWEtY29saW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYUNvbFNwYW46ICdhcmlhLWNvbHNwYW4nLFxuICAgICAgICBhcmlhQ3VycmVudDogJ2FyaWEtY3VycmVudCcsXG4gICAgICAgIGFyaWFEaXNhYmxlZDogJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgICBhcmlhRXhwYW5kZWQ6ICdhcmlhLWV4cGFuZGVkJyxcbiAgICAgICAgYXJpYUhhc1BvcHVwOiAnYXJpYS1oYXNwb3B1cCcsXG4gICAgICAgIGFyaWFIaWRkZW46ICdhcmlhLWhpZGRlbicsXG4gICAgICAgIGFyaWFJbnZhbGlkOiAnYXJpYS1pbnZhbGlkJyxcbiAgICAgICAgYXJpYUtleVNob3J0Y3V0czogJ2FyaWEta2V5c2hvcnRjdXRzJyxcbiAgICAgICAgYXJpYUxhYmVsOiAnYXJpYS1sYWJlbCcsXG4gICAgICAgIGFyaWFMZXZlbDogJ2FyaWEtbGV2ZWwnLFxuICAgICAgICBhcmlhTGl2ZTogJ2FyaWEtbGl2ZScsXG4gICAgICAgIGFyaWFNb2RhbDogJ2FyaWEtbW9kYWwnLFxuICAgICAgICBhcmlhTXVsdGlMaW5lOiAnYXJpYS1tdWx0aWxpbmUnLFxuICAgICAgICBhcmlhTXVsdGlTZWxlY3RhYmxlOiAnYXJpYS1tdWx0aXNlbGVjdGFibGUnLFxuICAgICAgICBhcmlhT3JpZW50YXRpb246ICdhcmlhLW9yaWVudGF0aW9uJyxcbiAgICAgICAgYXJpYVBsYWNlaG9sZGVyOiAnYXJpYS1wbGFjZWhvbGRlcicsXG4gICAgICAgIGFyaWFQb3NJblNldDogJ2FyaWEtcG9zaW5zZXQnLFxuICAgICAgICBhcmlhUHJlc3NlZDogJ2FyaWEtcHJlc3NlZCcsXG4gICAgICAgIGFyaWFSZWFkT25seTogJ2FyaWEtcmVhZG9ubHknLFxuICAgICAgICBhcmlhUmVsZXZhbnQ6ICdhcmlhLXJlbGV2YW50JyxcbiAgICAgICAgYXJpYVJlcXVpcmVkOiAnYXJpYS1yZXF1aXJlZCcsXG4gICAgICAgIGFyaWFSb2xlRGVzY3JpcHRpb246ICdhcmlhLXJvbGVkZXNjcmlwdGlvbicsXG4gICAgICAgIGFyaWFSb3dDb3VudDogJ2FyaWEtcm93Y291bnQnLFxuICAgICAgICBhcmlhUm93SW5kZXg6ICdhcmlhLXJvd2luZGV4JyxcbiAgICAgICAgYXJpYVJvd0luZGV4VGV4dDogJ2FyaWEtcm93aW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYVJvd1NwYW46ICdhcmlhLXJvd3NwYW4nLFxuICAgICAgICBhcmlhU2VsZWN0ZWQ6ICdhcmlhLXNlbGVjdGVkJyxcbiAgICAgICAgYXJpYVNldFNpemU6ICdhcmlhLXNldHNpemUnLFxuICAgICAgICBhcmlhU29ydDogJ2FyaWEtc29ydCcsXG4gICAgICAgIGFyaWFWYWx1ZU1heDogJ2FyaWEtdmFsdWVtYXgnLFxuICAgICAgICBhcmlhVmFsdWVNaW46ICdhcmlhLXZhbHVlbWluJyxcbiAgICAgICAgYXJpYVZhbHVlTm93OiAnYXJpYS12YWx1ZW5vdycsXG4gICAgICAgIGFyaWFWYWx1ZVRleHQ6ICdhcmlhLXZhbHVldGV4dCcsXG4gICAgICAgIHJvbGU6ICdyb2xlJ1xuICAgIH07XG4gICAgY29uc3QgaW5pdEFvbSA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gYW9tKSB7XG4gICAgICAgICAgICBpbnRlcm5hbHNba2V5XSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY2xvc3VyZVZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhb21ba2V5XTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnRlcm5hbHMsIGtleSwge1xuICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3N1cmVWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zdXJlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlTWFwLnNldChyZWYsIGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpbml0Tm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgIGNvbnN0IHsgZm9ybSB9ID0gaW50ZXJuYWxzO1xuICAgICAgICBpbml0Rm9ybShub2RlLCBmb3JtLCBpbnRlcm5hbHMpO1xuICAgICAgICBpbml0TGFiZWxzKG5vZGUsIGludGVybmFscy5sYWJlbHMpO1xuICAgIH1cbiAgICBjb25zdCB3YWxrRmllbGRzZXQgPSAobm9kZSwgZmlyc3RSZW5kZXIgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG5vZGUsIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULCB7XG4gICAgICAgICAgICBhY2NlcHROb2RlKG5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzTWFwLmhhcyhub2RlKSA/XG4gICAgICAgICAgICAgICAgICAgIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICBjb25zdCBpc0NhbGxOZWNlc3NhcnkgPSAoIWZpcnN0UmVuZGVyIHx8IG5vZGUuZGlzYWJsZWQpO1xuICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuZm9ybURpc2FibGVkQ2FsbGJhY2sgJiYgaXNDYWxsTmVjZXNzYXJ5KSB7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoY3VycmVudCwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICduYW1lJ10gfTtcbiAgICBjb25zdCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyID0gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQodGFyZ2V0LCB0YXJnZXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0LmxvY2FsTmFtZSA9PT0gJ2ZpZWxkc2V0Jykge1xuICAgICAgICAgICAgICAgICAgICB3YWxrRmllbGRzZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVmVmFsdWVNYXAuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFscy5zZXRGb3JtVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pIDoge307XG4gICAgZnVuY3Rpb24gb2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb25SZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uUmVjb3JkO1xuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSBBcnJheS5mcm9tKGFkZGVkTm9kZXMpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IEFycmF5LmZyb20ocmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgIGFkZGVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZT8uKG5vZGUsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB3YWxrRmllbGRzZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzICYmIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbklucHV0cyhpbnRlcm5hbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hhZG93SG9zdHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gc2hhZG93SG9zdHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmcmFnbWVudE9ic2VydmVyQ2FsbGJhY2sobXV0YXRpb25MaXN0KSB7XG4gICAgICAgIG11dGF0aW9uTGlzdC5mb3JFYWNoKG11dGF0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZE5vZGVzIH0gPSBtdXRhdGlvbjtcbiAgICAgICAgICAgIHJlbW92ZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gZG9jdW1lbnRGcmFnbWVudE1hcC5nZXQobXV0YXRpb24udGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB1cGdyYWRlSW50ZXJuYWxzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyVXBncmFkZSA9IChmcmFnbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgIGlmICh3aW5kb3c/LlNoYWR5RE9NPy5pblVzZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQubW9kZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQuaG9zdCkge1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmU/LihmcmFnbWVudCwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgICAgIGRvY3VtZW50RnJhZ21lbnRNYXAuc2V0KGZyYWdtZW50LCBvYnNlcnZlcik7XG4gICAgfTtcbiAgICBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKSA6IHt9O1xuICAgIGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0RGlzYWJsZWQgPSAocmVmLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWYucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgcmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Rpc2FibGVkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUhpZGRlbklucHV0cyA9IChpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZGVuSW5wdXRzID0gaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscyk7XG4gICAgICAgIGhpZGRlbklucHV0cy5mb3JFYWNoKGhpZGRlbklucHV0ID0+IHtcbiAgICAgICAgICAgIGhpZGRlbklucHV0LnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlSGlkZGVuSW5wdXQgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGlucHV0Lm5hbWUgPSByZWYuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHJlZi5hZnRlcihpbnB1dCk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpLnB1c2goaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICBjb25zdCBpbml0UmVmID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlPy4ocmVmLCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMYWJlbHMgPSAocmVmLCBsYWJlbHMpID0+IHtcbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIEFycmF5LmZyb20obGFiZWxzKS5mb3JFYWNoKGxhYmVsID0+IGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVmLmNsaWNrLmJpbmQocmVmKSkpO1xuICAgICAgICAgICAgbGV0IGZpcnN0TGFiZWxJZCA9IGxhYmVsc1swXS5pZDtcbiAgICAgICAgICAgIGlmICghbGFiZWxzWzBdLmlkKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RMYWJlbElkID0gYCR7bGFiZWxzWzBdLmh0bWxGb3J9X0xhYmVsYDtcbiAgICAgICAgICAgICAgICBsYWJlbHNbMF0uaWQgPSBmaXJzdExhYmVsSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBmaXJzdExhYmVsSWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb3JtVmFsaWRpdHkgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBuYXRpdmVDb250cm9sVmFsaWRpdHkgPSBBcnJheS5mcm9tKGZvcm0uZWxlbWVudHMpXG4gICAgICAgICAgICAuZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudC50YWdOYW1lLmluY2x1ZGVzKCctJykgJiYgZWxlbWVudC52YWxpZGl0eSlcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsaWRpdHkudmFsaWQpO1xuICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pIHx8IFtdO1xuICAgICAgICBjb25zdCBwb2x5ZmlsbGVkVmFsaWRpdHkgPSBBcnJheS5mcm9tKHBvbHlmaWxsZWRFbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmlzQ29ubmVjdGVkKVxuICAgICAgICAgICAgLm1hcCgoY29udHJvbCkgPT4gaW50ZXJuYWxzTWFwLmdldChjb250cm9sKS52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IGhhc0ludmFsaWQgPSBbLi4ubmF0aXZlQ29udHJvbFZhbGlkaXR5LCAuLi5wb2x5ZmlsbGVkVmFsaWRpdHldLmluY2x1ZGVzKGZhbHNlKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgaGFzSW52YWxpZCk7XG4gICAgICAgIGZvcm0udG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCAhaGFzSW52YWxpZCk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtSW5wdXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtQ2hhbmdlQ2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZpbmRQYXJlbnRGb3JtKGV2ZW50LnRhcmdldCkpO1xuICAgIH07XG4gICAgY29uc3Qgd2lyZVN1Ym1pdExvZ2ljID0gKGZvcm0pID0+IHtcbiAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9uU2VsZWN0b3IgPSBbJ2J1dHRvblt0eXBlPXN1Ym1pdF0nLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgJ2J1dHRvbjpub3QoW3R5cGVdKSddXG4gICAgICAgICAgICAubWFwKHNlbCA9PiBgJHtzZWx9Om5vdChbZGlzYWJsZWRdKWApXG4gICAgICAgICAgICAubWFwKHNlbCA9PiBgJHtzZWx9Om5vdChbZm9ybV0pJHtmb3JtLmlkID8gYCwke3NlbH1bZm9ybT0nJHtmb3JtLmlkfSddYCA6ICcnfWApXG4gICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KHN1Ym1pdEJ1dHRvblNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybS5ub1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlMaXN0ID0gbm9kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkaXR5TGlzdC5pbmNsdWRlcyhmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9ybVJlc2V0Q2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkICYmIGVsZW1lbnQuZm9ybVJlc2V0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjay5hcHBseShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5pdEZvcm0gPSAocmVmLCBmb3JtLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzLmFkZChyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5pdFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBpbml0U2V0LmFkZChyZWYpO1xuICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50c01hcC5zZXQoZm9ybSwgaW5pdFNldCk7XG4gICAgICAgICAgICAgICAgd2lyZVN1Ym1pdExvZ2ljKGZvcm0pO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCBmb3JtUmVzZXRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZvcm1JbnB1dENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZvcm1DaGFuZ2VDYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3Jtc01hcC5zZXQoZm9ybSwgeyByZWYsIGludGVybmFscyB9KTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgcmVmLmZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2suYXBwbHkocmVmLCBbZm9ybV0pO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGFyZW50Rm9ybSA9IChlbGVtKSA9PiB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUgIT09ICdGT1JNJykge1xuICAgICAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEZvcm0ocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkID0gKHJlZiwgbWVzc2FnZSwgRXJyb3JUeXBlID0gRE9NRXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICghcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3JUeXBlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvdmVycmlkZUZvcm1NZXRob2QgPSAoZm9ybSwgcmV0dXJuVmFsdWUsIG1ldGhvZCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBpbnRlcm5hbHNbbWV0aG9kXSgpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCB1cGdyYWRlSW50ZXJuYWxzID0gKHJlZikgPT4ge1xuICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KHJlZik7XG4gICAgICAgICAgICBjb25zdCB7IGxhYmVscywgZm9ybSB9ID0gaW50ZXJuYWxzO1xuICAgICAgICAgICAgaW5pdExhYmVscyhyZWYsIGxhYmVscyk7XG4gICAgICAgICAgICBpbml0Rm9ybShyZWYsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsaWRpdHlTdGF0ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5iYWRJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VPdmVyZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZVVuZGVyZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGVwTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9vTG9uZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29TaG9ydCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50eXBlTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZU1pc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNldFZhbGlkID0gKHZhbGlkaXR5T2JqZWN0KSA9PiB7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50b29Mb25nID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IHRydWU7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdmFsaWRpdHlPYmplY3Q7XG4gICAgfTtcbiAgICBjb25zdCByZWNvbmNpbGVWYWxpZGl0eSA9ICh2YWxpZGl0eU9iamVjdCwgbmV3U3RhdGUsIGZvcm0pID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsaWQgPSBpc1ZhbGlkKG5ld1N0YXRlKTtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3U3RhdGUpLmZvckVhY2goa2V5ID0+IHZhbGlkaXR5T2JqZWN0W2tleV0gPSBuZXdTdGF0ZVtrZXldKTtcbiAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgIHNldEZvcm1WYWxpZGl0eShmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRpdHlPYmplY3Q7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkID0gKHZhbGlkaXR5U3RhdGUpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHZhbGlkaXR5U3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICd2YWxpZCcgJiYgdmFsaWRpdHlTdGF0ZVtrZXldICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21TdGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgZnVuY3Rpb24gYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpIHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShzdGF0ZU5hbWUsIHRydWUpO1xuICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgIHJlZi5wYXJ0LmFkZChzdGF0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIEN1c3RvbVN0YXRlU2V0IGV4dGVuZHMgU2V0IHtcbiAgICAgICAgc3RhdGljIGdldCBpc1BvbHlmaWxsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihyZWYpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICBpZiAoIXJlZiB8fCAhcmVmLnRhZ05hbWUgfHwgcmVmLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1c3RvbVN0YXRlTWFwLnNldCh0aGlzLCByZWYpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKCEvXi0tLy50ZXN0KHN0YXRlKSB8fCB0eXBlb2Ygc3RhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkZCcgb24gJ0N1c3RvbVN0YXRlU2V0JzogVGhlIHNwZWNpZmllZCB2YWx1ZSAke3N0YXRlfSBtdXN0IHN0YXJ0IHdpdGggJy0tJy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmFkZChzdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjdXN0b21TdGF0ZU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZU5hbWUgPSBgc3RhdGUke3N0YXRlfWA7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXIoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBbZW50cnldIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGUoZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VwZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUoc3RhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjdXN0b21TdGF0ZU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnBhcnQucmVtb3ZlKGBzdGF0ZSR7c3RhdGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlJHtzdGF0ZX1gLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnBhcnQucmVtb3ZlKGBzdGF0ZSR7c3RhdGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHM7XG4gICAgY2xhc3MgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50cykge1xuICAgICAgICAgICAgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIGVsZW1lbnRzLCBcImZcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2VsZW1lbnQuZ2V0QXR0cmlidXRlKCduYW1lJyldID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIFwiZlwiKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgWyhfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtKGkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW2ldID09IG51bGwgPyBudWxsIDogdGhpc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lZEl0ZW0obmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbbmFtZV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF0Y2hGb3JtUHJvdG90eXBlKCkge1xuICAgICAgICBjb25zdCBjaGVja1ZhbGlkaXR5ID0gSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5jaGVja1ZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHkgPSBjaGVja1ZhbGlkaXR5T3ZlcnJpZGU7XG4gICAgICAgIGNvbnN0IHJlcG9ydFZhbGlkaXR5ID0gSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5yZXBvcnRWYWxpZGl0eTtcbiAgICAgICAgSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5yZXBvcnRWYWxpZGl0eSA9IHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGU7XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmFsaWRpdHlPdmVycmlkZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBjaGVja1ZhbGlkaXR5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlRm9ybU1ldGhvZCh0aGlzLCByZXR1cm5WYWx1ZSwgJ2NoZWNrVmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXBvcnRWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHJlcG9ydFZhbGlkaXR5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlRm9ybU1ldGhvZCh0aGlzLCByZXR1cm5WYWx1ZSwgJ3JlcG9ydFZhbGlkaXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBnZXQgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgJ2VsZW1lbnRzJyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnLCB7XG4gICAgICAgICAgICBnZXQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0LmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seWZpbGxlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShmb3JtRWxlbWVudHNNYXAuZ2V0KHRoaXMpIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWZpbGxlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyZWRFbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudHMpLmNvbmNhdChwb2x5ZmlsbGVkRWxlbWVudHMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgMiA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKG9yZGVyZWRFbGVtZW50cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzIHtcbiAgICAgICAgc3RhdGljIGdldCBpc1BvbHlmaWxsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihyZWYpIHtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSByZWYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gbmV3IFZhbGlkaXR5U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzID0gbmV3IEN1c3RvbVN0YXRlU2V0KHJlZik7XG4gICAgICAgICAgICByZWZNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgICAgICB2YWxpZGl0eU1hcC5zZXQodGhpcywgdmFsaWRpdHkpO1xuICAgICAgICAgICAgaW50ZXJuYWxzTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgaW5pdEFvbShyZWYsIHRoaXMpO1xuICAgICAgICAgICAgaW5pdFJlZihyZWYsIHRoaXMpO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgICAgICBpZiAocm9vdE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgZGVmZXJVcGdyYWRlKHJvb3ROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaGVja1ZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnY2hlY2tWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkaXR5LnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlFdmVudCA9IG5ldyBFdmVudCgnaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5kaXNwYXRjaEV2ZW50KHZhbGlkaXR5RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkaXR5LnZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmb3JtKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ2Zvcm0nIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgbGV0IGZvcm07XG4gICAgICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGZpbmRQYXJlbnRGb3JtKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWxzKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ2xhYmVscycgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHJlZi5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgICBjb25zdCBob3N0Um9vdCA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgaWYgKGhvc3RSb290ICYmIGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvc3RSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmb3I9XCIke2lkfVwiXWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlcG9ydFZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAncmVwb3J0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy53aWxsVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy5jaGVja1ZhbGlkaXR5KCk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB2YWxpZGF0aW9uQW5jaG9yTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChhbmNob3IgJiYgIXJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiBhbmNob3IpIHtcbiAgICAgICAgICAgICAgICByZWYuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBzZXRGb3JtVmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEZvcm1WYWx1ZScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWYuZ2V0QXR0cmlidXRlKCduYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIEFycmF5LmZyb20odmFsdWUpLnJldmVyc2UoKS5mb3JFYWNoKChbZm9ybURhdGFLZXksIGZvcm1EYXRhVmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybURhdGFWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbklucHV0ID0gY3JlYXRlSGlkZGVuSW5wdXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0Lm5hbWUgPSBmb3JtRGF0YUtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gZm9ybURhdGFWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmVmFsdWVNYXAuc2V0KHJlZiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFZhbGlkaXR5KHZhbGlkaXR5Q2hhbmdlcywgdmFsaWRhdGlvbk1lc3NhZ2UsIGFuY2hvcikge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHlDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIGV4ZWN1dGUgXFwnc2V0VmFsaWRpdHlcXCcgb24gXFwnRWxlbWVudEludGVybmFsc1xcJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuY2hvck1hcC5zZXQodGhpcywgYW5jaG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlDaGFuZ2VzT2JqID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGl0eUNoYW5nZXNPYmpba2V5XSA9IHZhbGlkaXR5Q2hhbmdlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbGlkaXR5Q2hhbmdlc09iaikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWQodmFsaWRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hlY2sgPSB7IC4uLnZhbGlkaXR5LCAuLi52YWxpZGl0eUNoYW5nZXNPYmogfTtcbiAgICAgICAgICAgIGRlbGV0ZSBjaGVjay52YWxpZDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQgfSA9IHJlY29uY2lsZVZhbGlkaXR5KHZhbGlkaXR5LCBjaGVjaywgdGhpcy5mb3JtKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQgJiYgIXZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eSBpZiBvbmUgb3IgbW9yZSBmbGFncyBpbiB0aGUgZmlyc3QgYXJndW1lbnQgYXJlIHRydWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZU1hcC5zZXQodGhpcywgdmFsaWQgPyAnJyA6IHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICF2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgdmFsaWQpO1xuICAgICAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIGAkeyF2YWxpZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5zZXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgc2hhZG93Um9vdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gc2hhZG93Um9vdE1hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAndmFsaWRhdGlvbk1lc3NhZ2UnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAndmFsaWRpdHknIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHdpbGxWYWxpZGF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd3aWxsVmFsaWRhdGUnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKChyZWYuZGlzYWJsZWQgfHwgcmVmLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkgfHxcbiAgICAgICAgICAgICAgICByZWYuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFbGVtZW50SW50ZXJuYWxzU3VwcG9ydGVkKCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5FbGVtZW50SW50ZXJuYWxzIHx8ICFIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3MgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24gZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5kb21OYW1lID0gYGVsZW1lbnQtaW50ZXJuYWxzLWZlYXR1cmUtZGV0ZWN0aW9uLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJyl9YDtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHJhbmRvbU5hbWUsIEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uKTtcbiAgICAgICAgY29uc3QgZmVhdHVyZURldGVjdGlvbkVsZW1lbnQgPSBuZXcgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24oKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdzaGFkb3dSb290JyxcbiAgICAgICAgICAgICdmb3JtJyxcbiAgICAgICAgICAgICd3aWxsVmFsaWRhdGUnLFxuICAgICAgICAgICAgJ3ZhbGlkaXR5JyxcbiAgICAgICAgICAgICd2YWxpZGF0aW9uTWVzc2FnZScsXG4gICAgICAgICAgICAnbGFiZWxzJyxcbiAgICAgICAgICAgICdzZXRGb3JtVmFsdWUnLFxuICAgICAgICAgICAgJ3NldFZhbGlkaXR5JyxcbiAgICAgICAgICAgICdjaGVja1ZhbGlkaXR5JyxcbiAgICAgICAgICAgICdyZXBvcnRWYWxpZGl0eSdcbiAgICAgICAgXS5ldmVyeShwcm9wID0+IHByb3AgaW4gZmVhdHVyZURldGVjdGlvbkVsZW1lbnQuaW50ZXJuYWxzKTtcbiAgICB9XG4gICAgbGV0IGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgbGV0IGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgaWYgKGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5DdXN0b21TdGF0ZVNldCA9IEN1c3RvbVN0YXRlU2V0O1xuICAgICAgICBpZiAoYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBhdHRhY2hJbnRlcm5hbHMuY2FsbCh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc3RhdGVzID0gbmV3IEN1c3RvbVN0YXRlU2V0KHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsKGZvcmNlQ3VzdG9tU3RhdGVTZXQgPSB0cnVlKSB7XG4gICAgICAgIGlmIChoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuRWxlbWVudEludGVybmFscyA9IEVsZW1lbnRJbnRlcm5hbHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBDdXN0b21FbGVtZW50UmVnaXN0cnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbmUgPSBDdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmRlZmluZTtcbiAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGNvbnN0cnVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RlZENhbGxiYWNrID0gY29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3RlZENhbGxiYWNrTWFwLmhhcyh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrTWFwLnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZENhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRDYWxsYmFjay5hcHBseSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmluZS5jYWxsKHRoaXMsIG5hbWUsIGNvbnN0cnVjdG9yLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICdhdHRhY2hJbnRlcm5hbHMnIG9uICdIVE1MRWxlbWVudCc6IFVuYWJsZSB0byBhdHRhY2ggRWxlbWVudEludGVybmFscyB0byBub24tY3VzdG9tIGVsZW1lbnRzLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBET01FeGNlcHRpb246IEZhaWxlZCB0byBleGVjdXRlICdhdHRhY2hJbnRlcm5hbHMnIG9uICdIVE1MRWxlbWVudCc6IEVsZW1lbnRJbnRlcm5hbHMgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB3YXMgYWxyZWFkeSBhdHRhY2hlZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50SW50ZXJuYWxzKHRoaXMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2hTaGFkb3dPYnNlcnZlciguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGF0dGFjaFNoYWRvdy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dSb290TWFwLnNldCh0aGlzLCBzaGFkb3dSb290KTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlckV4aXN0cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzaGFkb3dSb290LCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2hhZG93SG9zdHNNYXAuc2V0KHRoaXMsIG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hTaGFkb3cgPSBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3c7XG4gICAgICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cgPSBhdHRhY2hTaGFkb3dPYnNlcnZlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlckV4aXN0cygpICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgIGRvY3VtZW50T2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBhdGNoRm9ybVByb3RvdHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZUN1c3RvbVN0YXRlU2V0IHx8XG4gICAgICAgICAgICAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSkge1xuICAgICAgICAgICAgZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0NlUG9seWZpbGwgPSAhIWN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s7XG4gICAgaWYgKCFpc0NlUG9seWZpbGwpIHtcbiAgICAgICAgaWYgKCFpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkge1xuICAgICAgICAgICAgZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0cy5mb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwgPSBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGw7XG4gICAgZXhwb3J0cy5mb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbCA9IGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHJldHVybiBleHBvcnRzO1xuXG59KSh7fSk7XG4iLCAiLyohXG4gKiBNSVQgTGljZW5zZVxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBQZWN1bGlhciBWZW50dXJlcywgTExDXG4gKiBcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqIFxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQVJSQVlfQlVGRkVSX05BTUUgPSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI7XG5jbGFzcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gQVJSQVlfQlVGRkVSX05BTUU7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgPT09IDAgJiYgZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGRhdGEuYnVmZmVyKVxuICAgICAgICAgICAgLnNsaWNlKGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvVWludDhBcnJheShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhkYXRhLCBVaW50OEFycmF5KTtcbiAgICB9XG4gICAgc3RhdGljIHRvVmlldyhkYXRhLCB0eXBlKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQnVmZmVyU291cmNlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgKGRhdGEgJiYgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEuYnVmZmVyKSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0VxdWFsKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYVZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGEpO1xuICAgICAgICBjb25zdCBiVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYik7XG4gICAgICAgIGlmIChhVmlldy5sZW5ndGggIT09IGJWaWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFWaWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVZpZXdbaV0gIT09IGJWaWV3W2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgY29uY2F0KC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGJ1ZmZlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmICEoYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiBhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3Muc2xpY2UoMCwgYXJncy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgc2l6ZSArPSBidWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgcmVzLnNldCh2aWV3LCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KHJlcywgYXJnc1thcmdzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNvbnN0IFNUUklOR19UWVBFID0gXCJzdHJpbmdcIjtcbmNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZl0rJC9pO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuY29uc3QgQkFTRTY0VVJMX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xuY2xhc3MgVXRmOENvbnZlcnRlciB7XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICBjb25zdCBzID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKTtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHVpbnRBcnJheVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWludEFycmF5LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCBlbmNvZGVkU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVuY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGVuY29kZWRTdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZWRTdHJpbmc7XG4gICAgfVxufVxuY2xhc3MgVXRmMTZDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBkYXRhVmlldy5nZXRVaW50MTYoaSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheUJ1ZmZlcih0ZXh0Lmxlbmd0aCAqIDIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhyZXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihpICogMiwgdGV4dC5jaGFyQ29kZUF0KGkpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuY2xhc3MgQ29udmVydCB7XG4gICAgc3RhdGljIGlzSGV4KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgSEVYX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRVUkxfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIFRvU3RyaW5nKGJ1ZmZlciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvVXRmOFN0cmluZyhidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9IZXgoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0VXJsKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tU3RyaW5nKHN0ciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tVXRmOFN0cmluZyhzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tSGV4KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjRVcmwoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeSA9IHRoaXMuVG9TdHJpbmcoYnVmLCBcImJpbmFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiBidG9hKGJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NChiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0KTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0VGV4dCcgaXMgbm90IEJhc2U2NCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXRvYiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShhdG9iKGZvcm1hdHRlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGZvcm1hdHRlZCwgXCJiYXNlNjRcIikpLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NFVybChiYXNlNjR1cmwpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0dXJsKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0VXJsKGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0dXJsJyBpcyBub3QgQmFzZTY0VXJsIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NCh0aGlzLkJhc2U2NFBhZGRpbmcoZm9ybWF0dGVkLnJlcGxhY2UoL1xcLS9nLCBcIitcIikucmVwbGFjZSgvXFxfL2csIFwiL1wiKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChkYXRhKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvXFw9L2csIFwiXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjhTdHJpbmcodGV4dCwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9VdGY4U3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJpbmFyeSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyaW5nTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Vmlldy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb0JpbmFyeShidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIFRvSGV4KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gYnVmW2ldO1xuICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBieXRlLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbUhleChoZXhTdHJpbmcpIHtcbiAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGhleFN0cmluZyk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0hleChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2hleFN0cmluZycgaXMgbm90IEhFWCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoICUgMikge1xuICAgICAgICAgICAgZm9ybWF0dGVkID0gYDAke2Zvcm1hdHRlZH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGZvcm1hdHRlZC5sZW5ndGggLyAyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBmb3JtYXR0ZWQuc2xpY2UoaSwgaSArIDIpO1xuICAgICAgICAgICAgcmVzW2kgLyAyXSA9IHBhcnNlSW50KGMsIDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvVXRmMTZTdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjE2U3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBCYXNlNjRQYWRkaW5nKGJhc2U2NCkge1xuICAgICAgICBjb25zdCBwYWRDb3VudCA9IDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpO1xuICAgICAgICBpZiAocGFkQ291bnQgPCA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gXCI9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U2NDtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhkYXRhKSB7XG4gICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnJlcGxhY2UoL1tcXG5cXHJcXHQgXS9nLCBcIlwiKSkgfHwgXCJcIjtcbiAgICB9XG59XG5Db252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgY29uc3QgcmVzID0gYXJndW1lbnRzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgcmVzW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb21iaW5lKC4uLmJ1Zikge1xuICAgIGNvbnN0IHRvdGFsQnl0ZUxlbmd0aCA9IGJ1Zi5tYXAoKGl0ZW0pID0+IGl0ZW0uYnl0ZUxlbmd0aCkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRvdGFsQnl0ZUxlbmd0aCk7XG4gICAgbGV0IGN1cnJlbnRQb3MgPSAwO1xuICAgIGJ1Zi5tYXAoKGl0ZW0pID0+IG5ldyBVaW50OEFycmF5KGl0ZW0pKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtMiBvZiBhcnIpIHtcbiAgICAgICAgICAgIHJlc1tjdXJyZW50UG9zKytdID0gaXRlbTI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIGlzRXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuQnVmZmVyU291cmNlQ29udmVydGVyID0gQnVmZmVyU291cmNlQ29udmVydGVyO1xuZXhwb3J0cy5Db252ZXJ0ID0gQ29udmVydDtcbmV4cG9ydHMuYXNzaWduID0gYXNzaWduO1xuZXhwb3J0cy5jb21iaW5lID0gY29tYmluZTtcbmV4cG9ydHMuaXNFcXVhbCA9IGlzRXF1YWw7XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5mdW5jdGlvbiBnZXRVVENEYXRlKGRhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnNWYWx1ZShwYXJhbWV0ZXJzLCBuYW1lLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGlmICgocGFyYW1ldGVycyBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoX2EgPSBwYXJhbWV0ZXJzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gYnVmZmVyVG9IZXhDb2RlcyhpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQpLCBpbnNlcnRTcGFjZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAobmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gaXRlbS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCArPSBzdHI7XHJcbiAgICAgICAgaWYgKGluc2VydFNwYWNlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgXFxcIkFycmF5QnVmZmVyXFxcIlwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEZyb21CYXNlKGlucHV0QnVmZmVyLCBpbnB1dEJhc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgaWYgKGlucHV0QnVmZmVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dEJ1ZmZlclswXTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGlucHV0QnVmZmVyWyhpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKSAtIGldICogTWF0aC5wb3coMiwgaW5wdXRCYXNlICogaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxUb0Jhc2UodmFsdWUsIGJhc2UsIHJlc2VydmVkID0gKC0xKSkge1xyXG4gICAgY29uc3QgaW50ZXJuYWxSZXNlcnZlZCA9IHJlc2VydmVkO1xyXG4gICAgbGV0IGludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgbGV0IGJpZ2dlc3QgPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgYmlnZ2VzdCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaW50ZXJuYWxSZXNlcnZlZCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnRlcm5hbFJlc2VydmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lzID0gTWF0aC5wb3coMiwgaiAqIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0gPSBNYXRoLmZsb29yKGludGVybmFsVmFsdWUgLyBiYXNpcyk7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFZhbHVlIC09IChyZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSkgKiBiYXNpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdnZXN0ICo9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0QnVmKC4uLmJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRCdWY7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdFZpZXcoLi4udmlld3MpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHZpZXcsIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmlldztcclxufVxyXG5mdW5jdGlvbiB1dGlsRGVjb2RlVEMoKSB7XHJcbiAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4KTtcclxuICAgIGlmICh0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGggPj0gMikge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjEgPSAoYnVmWzBdID09PSAweEZGKSAmJiAoYnVmWzFdICYgMHg4MCk7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMiA9IChidWZbMF0gPT09IDB4MDApICYmICgoYnVmWzFdICYgMHg4MCkgPT09IDB4MDApO1xyXG4gICAgICAgIGlmIChjb25kaXRpb24xIHx8IGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBiaWdJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IGJpZ0ludFZpZXcgPSBuZXcgVWludDhBcnJheShiaWdJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJpZ0ludFZpZXdbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgYmlnSW50Vmlld1swXSA9IChidWZbMF0gJiAweDgwKTtcclxuICAgIGNvbnN0IGJpZ0ludCA9IHV0aWxGcm9tQmFzZShiaWdJbnRWaWV3LCA4KTtcclxuICAgIGNvbnN0IHNtYWxsSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBzbWFsbEludFZpZXcgPSBuZXcgVWludDhBcnJheShzbWFsbEludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgc21hbGxJbnRWaWV3W2pdID0gYnVmW2pdO1xyXG4gICAgfVxyXG4gICAgc21hbGxJbnRWaWV3WzBdICY9IDB4N0Y7XHJcbiAgICBjb25zdCBzbWFsbEludCA9IHV0aWxGcm9tQmFzZShzbWFsbEludFZpZXcsIDgpO1xyXG4gICAgcmV0dXJuIChzbWFsbEludCAtIGJpZ0ludCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEVuY29kZVRDKHZhbHVlKSB7XHJcbiAgICBjb25zdCBtb2RWYWx1ZSA9ICh2YWx1ZSA8IDApID8gKHZhbHVlICogKC0xKSkgOiB2YWx1ZTtcclxuICAgIGxldCBiaWdJbnQgPSAxMjg7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmIChtb2RWYWx1ZSA8PSBiaWdJbnQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxJbnQgPSBiaWdJbnQgLSBtb2RWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldEJ1ZiA9IHV0aWxUb0Jhc2Uoc21hbGxJbnQsIDgsIGkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXRCdWYgPSB1dGlsVG9CYXNlKG1vZFZhbHVlLCA4LCBpKTtcclxuICAgICAgICAgICAgbGV0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBpZiAocmV0Vmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWYgPSByZXRCdWYuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRlbXBCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKHJldEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGVtcEJ1Zi5ieXRlTGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2sgKyAxXSA9IHRlbXBWaWV3W2tdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnSW50ICo9IE1hdGgucG93KDIsIDgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRXF1YWxCdWZmZXIoaW5wdXRCdWZmZXIxLCBpbnB1dEJ1ZmZlcjIpIHtcclxuICAgIGlmIChpbnB1dEJ1ZmZlcjEuYnl0ZUxlbmd0aCAhPT0gaW5wdXRCdWZmZXIyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2aWV3MSA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMSk7XHJcbiAgICBjb25zdCB2aWV3MiA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZpZXcxW2ldICE9PSB2aWV3MltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcGFkTnVtYmVyKGlucHV0TnVtYmVyLCBmdWxsTGVuZ3RoKSB7XHJcbiAgICBjb25zdCBzdHIgPSBpbnB1dE51bWJlci50b1N0cmluZygxMCk7XHJcbiAgICBpZiAoZnVsbExlbmd0aCA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRpZiA9IGZ1bGxMZW5ndGggLSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcGFkZGluZyA9IG5ldyBBcnJheShkaWYpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWY7IGkrKykge1xyXG4gICAgICAgIHBhZGRpbmdbaV0gPSBcIjBcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZGRpbmdTdHJpbmcgPSBwYWRkaW5nLmpvaW4oXCJcIik7XHJcbiAgICByZXR1cm4gcGFkZGluZ1N0cmluZy5jb25jYXQoc3RyKTtcclxufVxyXG5jb25zdCBiYXNlNjRUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcclxuY29uc3QgYmFzZTY0VXJsVGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89XCI7XHJcbmZ1bmN0aW9uIHRvQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBza2lwUGFkZGluZyA9IGZhbHNlLCBza2lwTGVhZGluZ1plcm9zID0gZmFsc2UpIHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBmbGFnMSA9IDA7XHJcbiAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgaWYgKHNraXBMZWFkaW5nWmVyb3MpIHtcclxuICAgICAgICBsZXQgbm9uWmVyb1Bvc2l0aW9uID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvUG9zaXRpb24gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShub25aZXJvUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaHIxID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcyID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMyA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBjb25zdCBlbmMxID0gY2hyMSA+PiAyO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoKGNocjEgJiAweDAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xyXG4gICAgICAgIGxldCBlbmMzID0gKChjaHIyICYgMHgwRikgPDwgMikgfCAoY2hyMyA+PiA2KTtcclxuICAgICAgICBsZXQgZW5jNCA9IGNocjMgJiAweDNGO1xyXG4gICAgICAgIGlmIChmbGFnMSA9PT0gMSkge1xyXG4gICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZsYWcyID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlbmM0ID0gNjQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNraXBQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmMzID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuYzQgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBmcm9tQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBjdXRUYWlsWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGZ1bmN0aW9uIGluZGV4T2YodG9TZWFyY2gpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdChpKSA9PT0gdG9TZWFyY2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDY0O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGVzdChpbmNvbWluZykge1xyXG4gICAgICAgIHJldHVybiAoKGluY29taW5nID09PSA2NCkgPyAweDAwIDogaW5jb21pbmcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMyID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMzID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmM0ID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBjaHIxID0gKHRlc3QoZW5jMSkgPDwgMikgfCAodGVzdChlbmMyKSA+PiA0KTtcclxuICAgICAgICBjb25zdCBjaHIyID0gKCh0ZXN0KGVuYzIpICYgMHgwRikgPDwgNCkgfCAodGVzdChlbmMzKSA+PiAyKTtcclxuICAgICAgICBjb25zdCBjaHIzID0gKCh0ZXN0KGVuYzMpICYgMHgwMykgPDwgNikgfCB0ZXN0KGVuYzQpO1xyXG4gICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpO1xyXG4gICAgICAgIGlmIChlbmMzICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYzQgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjdXRUYWlsWmVyb3MpIHtcclxuICAgICAgICBjb25zdCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBub25aZXJvU3RhcnQgPSAoLTEpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAob3V0cHV0TGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1N0YXJ0ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub25aZXJvU3RhcnQgIT09ICgtMSkpIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDAsIG5vblplcm9TdGFydCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9TdHJpbmcoYnVmZmVyKSB7XHJcbiAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZpZXcpIHtcclxuICAgICAgICByZXN1bHRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRTdHJpbmc7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHIpIHtcclxuICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nTGVuZ3RoKTtcclxuICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdFZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRCdWZmZXI7XHJcbn1cclxuY29uc3QgbG9nMiA9IE1hdGgubG9nKDIpO1xyXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZjIobGVuZ3RoKSB7XHJcbiAgICBjb25zdCBiYXNlID0gKE1hdGgubG9nKGxlbmd0aCkgLyBsb2cyKTtcclxuICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihiYXNlKTtcclxuICAgIGNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZChiYXNlKTtcclxuICAgIHJldHVybiAoKGZsb29yID09PSByb3VuZCkgPyBmbG9vciA6IHJvdW5kKTtcclxufVxyXG5mdW5jdGlvbiBjbGVhclByb3BzKG9iamVjdCwgcHJvcHNBcnJheSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzQXJyYXkpIHtcclxuICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BdO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGFycmF5QnVmZmVyVG9TdHJpbmcsIGJ1ZmZlclRvSGV4Q29kZXMsIGNoZWNrQnVmZmVyUGFyYW1zLCBjbGVhclByb3BzLCBmcm9tQmFzZTY0LCBnZXRQYXJhbWV0ZXJzVmFsdWUsIGdldFVUQ0RhdGUsIGlzRXF1YWxCdWZmZXIsIG5lYXJlc3RQb3dlck9mMiwgcGFkTnVtYmVyLCBzdHJpbmdUb0FycmF5QnVmZmVyLCB0b0Jhc2U2NCwgdXRpbENvbmNhdEJ1ZiwgdXRpbENvbmNhdFZpZXcsIHV0aWxEZWNvZGVUQywgdXRpbEVuY29kZVRDLCB1dGlsRnJvbUJhc2UsIHV0aWxUb0Jhc2UgfTtcbiIsICIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgR01PIEdsb2JhbFNpZ25cbiAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQZWN1bGlhciBWZW50dXJlc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFxuICogQXV0aG9yIDIwMTQtMjAxOSwgWXVyeSBTdHJvemhldnNreVxuICogXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiBcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICogXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKiBcbiAqL1xuXG5pbXBvcnQgKiBhcyBwdnRzdXRpbHMgZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCAqIGFzIHB2dXRpbHMgZnJvbSAncHZ1dGlscyc7XG5cbmZ1bmN0aW9uIGFzc2VydEJpZ0ludCgpIHtcclxuICAgIGlmICh0eXBlb2YgQmlnSW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGlzIG5vdCBkZWZpbmVkLiBZb3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaW1wbGVtZW50IEJpZ0ludC5cIik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29uY2F0KGJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSAnVWludDhBcnJheSdcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XG5cbmNsYXNzIFZpZXdXcml0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgd3JpdGUoYnVmKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGJ1Zik7XHJcbiAgICB9XHJcbiAgICBmaW5hbCgpIHtcclxuICAgICAgICByZXR1cm4gY29uY2F0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHBvd2VyczIgPSBbbmV3IFVpbnQ4QXJyYXkoWzFdKV07XHJcbmNvbnN0IGRpZ2l0c1N0cmluZyA9IFwiMDEyMzQ1Njc4OVwiO1xyXG5jb25zdCBOQU1FID0gXCJuYW1lXCI7XHJcbmNvbnN0IFZBTFVFX0hFWF9WSUVXID0gXCJ2YWx1ZUhleFZpZXdcIjtcclxuY29uc3QgSVNfSEVYX09OTFkgPSBcImlzSGV4T25seVwiO1xyXG5jb25zdCBJRF9CTE9DSyA9IFwiaWRCbG9ja1wiO1xyXG5jb25zdCBUQUdfQ0xBU1MgPSBcInRhZ0NsYXNzXCI7XHJcbmNvbnN0IFRBR19OVU1CRVIgPSBcInRhZ051bWJlclwiO1xyXG5jb25zdCBJU19DT05TVFJVQ1RFRCA9IFwiaXNDb25zdHJ1Y3RlZFwiO1xyXG5jb25zdCBGUk9NX0JFUiA9IFwiZnJvbUJFUlwiO1xyXG5jb25zdCBUT19CRVIgPSBcInRvQkVSXCI7XHJcbmNvbnN0IExPQ0FMID0gXCJsb2NhbFwiO1xyXG5jb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xyXG5jb25zdCBFTVBUWV9CVUZGRVIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbmNvbnN0IEVNUFRZX1ZJRVcgPSBuZXcgVWludDhBcnJheSgwKTtcclxuY29uc3QgRU5EX09GX0NPTlRFTlRfTkFNRSA9IFwiRW5kT2ZDb250ZW50XCI7XHJcbmNvbnN0IE9DVEVUX1NUUklOR19OQU1FID0gXCJPQ1RFVCBTVFJJTkdcIjtcclxuY29uc3QgQklUX1NUUklOR19OQU1FID0gXCJCSVQgU1RSSU5HXCI7XG5cbmZ1bmN0aW9uIEhleEJsb2NrKEJhc2VDbGFzcykge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgcmV0dXJuIF9hID0gY2xhc3MgU29tZSBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gcGFyYW1zLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHBhcmFtcy52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtcy52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldCB2YWx1ZUhleCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQgdmFsdWVIZXgodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJGbGFnICdpc0hleE9ubHknIGlzIG5vdCBzZXQsIGFib3J0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPT09IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSGV4T25seTogdGhpcy5pc0hleE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVIZXg6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hLk5BTUUgPSBcImhleEJsb2NrXCIsXHJcbiAgICAgICAgX2E7XHJcbn1cblxuY2xhc3MgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBibG9ja0xlbmd0aCA9IDAsIGVycm9yID0gRU1QVFlfU1RSSU5HLCB3YXJuaW5ncyA9IFtdLCB2YWx1ZUJlZm9yZURlY29kZSA9IEVNUFRZX1ZJRVcsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IHdhcm5pbmdzO1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWVCZWZvcmVEZWNvZGUpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGJsb2NrTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5OQU1FO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlQmVmb3JlRGVjb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJlZm9yZURlY29kZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJsb2NrTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FLFxyXG4gICAgICAgICAgICBibG9ja0xlbmd0aDogdGhpcy5ibG9ja0xlbmd0aCxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXHJcbiAgICAgICAgICAgIHdhcm5pbmdzOiB0aGlzLndhcm5pbmdzLFxyXG4gICAgICAgICAgICB2YWx1ZUJlZm9yZURlY29kZTogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCYXNlQmxvY2suTkFNRSA9IFwiYmFzZUJsb2NrXCI7XG5cbmNsYXNzIFZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG59XHJcblZhbHVlQmxvY2suTkFNRSA9IFwidmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIGlmIChpZEJsb2NrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gaWRCbG9jay5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlkQmxvY2sudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpZEJsb2NrLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoX2IgPSBpZEJsb2NrLnRhZ0NsYXNzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAoX2MgPSBpZEJsb2NrLnRhZ051bWJlcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChfZCA9IGlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlyc3RPY3RldCA9IDA7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4NDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHhDMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgyMDtcclxuICAgICAgICBpZiAodGhpcy50YWdOdW1iZXIgPCAzMSAmJiAhdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy50YWdOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBudW1iZXIgJj0gMHgxRjtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IGZpcnN0T2N0ZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy50YWdOdW1iZXIsIDcpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSArIDEpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3NpemVdID0gZW5jb2RlZFZpZXdbc2l6ZSAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoY3VyVmlldy5sZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoXSA9IGN1clZpZXdbY3VyVmlldy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWdDbGFzc01hc2sgPSBpbnRCdWZmZXJbMF0gJiAweEMwO1xyXG4gICAgICAgIHN3aXRjaCAodGFnQ2xhc3NNYXNrKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMHgwMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDQwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4ODA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHhDMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoNCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChpbnRCdWZmZXJbMF0gJiAweDIwKSA9PT0gMHgyMDtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRhZ051bWJlck1hc2sgPSBpbnRCdWZmZXJbMF0gJiAweDFGO1xyXG4gICAgICAgIGlmICh0YWdOdW1iZXJNYXNrICE9PSAweDFGKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKHRhZ051bWJlck1hc2spO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDE7XHJcbiAgICAgICAgICAgIGxldCBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDI1NSk7XHJcbiAgICAgICAgICAgIGxldCB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggPSAyNTU7XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRCdWZmZXJbY291bnRdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggKz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludFRhZ051bWJlckJ1ZmZlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAoY291bnQgKyAxKTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcclxuICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyLnNldCh0ZW1wQnVmZmVyVmlldyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGludFRhZ051bWJlckJ1ZmZlciwgNyk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGFnIHRvbyBsb25nLCByZXByZXNlbnRlZCBhcyBoZXgtY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCgodGhpcy50YWdDbGFzcyA9PT0gMSkpICYmXHJcbiAgICAgICAgICAgICh0aGlzLmlzQ29uc3RydWN0ZWQpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkNvbnN0cnVjdGVkIGVuY29kaW5nIHVzZWQgZm9yIHByaW1pdGl2ZSB0eXBlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdGFnQ2xhc3M6IHRoaXMudGFnQ2xhc3MsXHJcbiAgICAgICAgICAgIHRhZ051bWJlcjogdGhpcy50YWdOdW1iZXIsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsSWRlbnRpZmljYXRpb25CbG9jay5OQU1FID0gXCJpZGVudGlmaWNhdGlvbkJsb2NrXCI7XG5cbmNsYXNzIExvY2FsTGVuZ3RoQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGxlbkJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gKF9hID0gbGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAoX2IgPSBsZW5CbG9jay5sb25nRm9ybVVzZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gKF9jID0gbGVuQmxvY2subGVuZ3RoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW50QnVmZmVyWzBdID09PSAweEZGKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkxlbmd0aCBibG9jayAweEZGIGlzIHJlc2VydmVkIGJ5IHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaW50QnVmZmVyWzBdID09PSAweDgwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAhIShpbnRCdWZmZXJbMF0gJiAweDgwKTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gKGludEJ1ZmZlclswXSk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50QnVmZmVyWzBdICYgMHg3RjtcclxuICAgICAgICBpZiAoY291bnQgPiA4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgaW50ZWdlclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoY291bnQgKyAxKSA+IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5PZmZzZXQgPSBpbnB1dE9mZnNldCArIDE7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoQnVmZmVyVmlldyA9IHZpZXcuc3ViYXJyYXkobGVuT2Zmc2V0LCBsZW5PZmZzZXQgKyBjb3VudCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aEJ1ZmZlclZpZXdbY291bnQgLSAxXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGVuY29kZWQgbGVuZ3RoXCIpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHZ1dGlscy51dGlsRnJvbUJhc2UobGVuZ3RoQnVmZmVyVmlldywgOCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkICYmICh0aGlzLmxlbmd0aCA8PSAxMjcpKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJVbm5lY2Vzc2FyeSB1c2FnZSBvZiBsb25nIGxlbmd0aCBmb3JtXCIpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBjb3VudCArIDE7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgbGV0IHJldFZpZXc7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMTI3KVxyXG4gICAgICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4ODA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy5sZW5ndGgsIDgpO1xyXG4gICAgICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID4gMTI3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChFTVBUWV9CVUZGRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihlbmNvZGVkQnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggfCAweDgwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICBsb25nRm9ybVVzZWQ6IHRoaXMubG9uZ0Zvcm1Vc2VkLFxyXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxMZW5ndGhCbG9jay5OQU1FID0gXCJsZW5ndGhCbG9ja1wiO1xuXG5jb25zdCB0eXBlU3RvcmUgPSB7fTtcblxuY2xhc3MgQmFzZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCBwcmltaXRpdmVTY2hlbWEsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCB2YWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgICAgIGlmIChwcmltaXRpdmVTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltaXRpdmVTY2hlbWEgPSBwcmltaXRpdmVTY2hlbWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jayA9IG5ldyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5sZW5CbG9jayA9IG5ldyBMb2NhbExlbmd0aEJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jayA9IHZhbHVlQmxvY2tUeXBlID8gbmV3IHZhbHVlQmxvY2tUeXBlKHBhcmFtZXRlcnMpIDogbmV3IFZhbHVlQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICBwcmVwYXJlSW5kZWZpbml0ZUZvcm0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQmxvY2tCdWYgPSB0aGlzLmlkQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgIF93cml0ZXIud3JpdGUoaWRCbG9ja0J1Zik7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFsweDgwXSkuYnVmZmVyKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgQXJyYXlCdWZmZXIoMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9ja0J1ZiA9IHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuQmxvY2subGVuZ3RoID0gdmFsdWVCbG9ja0J1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBsZW5CbG9ja0J1ZiA9IHRoaXMubGVuQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKGxlbkJsb2NrQnVmKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZSh2YWx1ZUJsb2NrQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpZEJsb2NrOiB0aGlzLmlkQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB0aGlzLmxlbkJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZUJsb2NrOiB0aGlzLnZhbHVlQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVTY2hlbWEpXHJcbiAgICAgICAgICAgIG9iamVjdC5wcmltaXRpdmVTY2hlbWEgPSB0aGlzLnByaW1pdGl2ZVNjaGVtYS50b0pTT04oKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImFzY2lpXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYXNjaWlcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkFzY2lpRW5jb2RpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudG9CRVIoKSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUJlZm9yZURlY29kZVZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBpc0VxdWFsKG90aGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGhpc1JhdyA9IHRoaXMudG9CRVIoKTtcclxuICAgICAgICBjb25zdCBvdGhlclJhdyA9IG90aGVyLnRvQkVSKCk7XHJcbiAgICAgICAgcmV0dXJuIHB2dXRpbHMuaXNFcXVhbEJ1ZmZlcih0aGlzUmF3LCBvdGhlclJhdyk7XHJcbiAgICB9XHJcbn1cclxuQmFzZUJsb2NrLk5BTUUgPSBcIkJhc2VCbG9ja1wiO1xyXG5mdW5jdGlvbiBwcmVwYXJlSW5kZWZpbml0ZUZvcm0oYmFzZUJsb2NrKSB7XHJcbiAgICBpZiAoYmFzZUJsb2NrIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBiYXNlQmxvY2sudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAocHJlcGFyZUluZGVmaW5pdGVGb3JtKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbn1cblxuY2xhc3MgQmFzZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CdWZmZXIodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJyR7dGhpcy52YWx1ZUJsb2NrLnZhbHVlfSdgO1xyXG4gICAgfVxyXG59XHJcbkJhc2VTdHJpbmdCbG9jay5OQU1FID0gXCJCYXNlU3RyaW5nQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0hleE9ubHkgPSB0cnVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gaXNIZXhPbmx5O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUHJpbWl0aXZlVmFsdWVCbG9jay5OQU1FID0gXCJQcmltaXRpdmVWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR3O1xyXG5jbGFzcyBQcmltaXRpdmUgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbl9hJHcgPSBQcmltaXRpdmU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbWl0aXZlID0gX2EkdztcclxufSkoKTtcclxuUHJpbWl0aXZlLk5BTUUgPSBcIlBSSU1JVElWRVwiO1xuXG5mdW5jdGlvbiBsb2NhbENoYW5nZVR5cGUoaW5wdXRPYmplY3QsIG5ld1R5cGUpIHtcclxuICAgIGlmIChpbnB1dE9iamVjdCBpbnN0YW5jZW9mIG5ld1R5cGUpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPYmplY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgbmV3VHlwZSgpO1xyXG4gICAgbmV3T2JqZWN0LmlkQmxvY2sgPSBpbnB1dE9iamVjdC5pZEJsb2NrO1xyXG4gICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gaW5wdXRPYmplY3QubGVuQmxvY2s7XHJcbiAgICBuZXdPYmplY3Qud2FybmluZ3MgPSBpbnB1dE9iamVjdC53YXJuaW5ncztcclxuICAgIG5ld09iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dE9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXc7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG59XHJcbmZ1bmN0aW9uIGxvY2FsRnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IGlucHV0QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgY29uc3QgaW5jb21pbmdPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgIGxldCByZXR1cm5PYmplY3QgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgIGNvbnN0IGJhc2VCbG9jayA9IG5ldyBMb2NhbEJhc2VCbG9jaygpO1xyXG4gICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gYmFzZUJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmICghaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5pZEJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICBpZiAoIXJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgJiZcclxuICAgICAgICByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiSW5kZWZpbml0ZSBsZW5ndGggZm9ybSB1c2VkIGZvciBwcmltaXRpdmUgZW5jb2RpbmcgZm9ybVwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdBU04xVHlwZSA9IEJhc2VCbG9jaztcclxuICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyID49IDM3KSAmJlxyXG4gICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5pZEJsb2NrLmlzSGV4T25seSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlVOSVZFUlNBTCAzNyBhbmQgdXBwZXIgdGFncyBhcmUgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlR5cGUgW1VOSVZFUlNBTCAwXSBpcyByZXNlcnZlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVuZE9mQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Cb29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkludGVnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQml0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9jdGV0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW51bWVyYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVXRmOFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5USU1FO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIltVTklWRVJTQUwgMTVdIGlzIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXF1ZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JQTVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVUQ1RpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJtcFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuREFURTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGltZU9mRGF5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyB0eXBlU3RvcmUuQ29uc3RydWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyB0eXBlU3RvcmUuUHJpbWl0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmlkQmxvY2sgPSByZXR1cm5PYmplY3QuaWRCbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QubGVuQmxvY2sgPSByZXR1cm5PYmplY3QubGVuQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gcmV0dXJuT2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCA9IG5ld09iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgPyB0eXBlU3RvcmUuQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgIDogdHlwZVN0b3JlLlByaW1pdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm5PYmplY3QgPSBsb2NhbENoYW5nZVR5cGUocmV0dXJuT2JqZWN0LCBuZXdBU04xVHlwZSk7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID8gaW5wdXRMZW5ndGggOiByZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoKTtcclxuICAgIHJldHVybk9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbmNvbWluZ09mZnNldCwgaW5jb21pbmdPZmZzZXQgKyByZXR1cm5PYmplY3QuYmxvY2tMZW5ndGgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IHJlc3VsdE9mZnNldCxcclxuICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBmcm9tQkVSKGlucHV0QnVmZmVyKSB7XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICByZXN1bHQuZXJyb3IgPSBcIklucHV0IGJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc2xpY2UoKSwgMCwgaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCk7XHJcbn1cblxuZnVuY3Rpb24gY2hlY2tMZW4oaW5kZWZpbml0ZUxlbmd0aCwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaW5kZWZpbml0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbmd0aDtcclxufVxyXG5jbGFzcyBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCBpc0luZGVmaW5pdGVGb3JtID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoY2hlY2tMZW4odGhpcy5pc0luZGVmaW5pdGVGb3JtLCBpbnB1dExlbmd0aCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVybk9iamVjdCA9IGxvY2FsRnJvbUJFUih2aWV3LCBjdXJyZW50T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5PYmplY3Qub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHJldHVybk9iamVjdC5yZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QucmVzdWx0Lndhcm5pbmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gcmV0dXJuT2JqZWN0Lm9mZnNldDtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmV0dXJuT2JqZWN0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0gJiYgcmV0dXJuT2JqZWN0LnJlc3VsdC5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV0uY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vIEVuZE9mQ29udGVudCBibG9jayBlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB2YWx1ZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnZhbHVlLnB1c2godmFsdWUudG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLk5BTUUgPSBcIkNvbnN0cnVjdGVkVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdjtcclxuY2xhc3MgQ29uc3RydWN0ZWQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoXCJhc2NpaVwiKS5zcGxpdChcIlxcblwiKS5tYXAobyA9PiBgICAke299YCkuam9pbihcIlxcblwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IHRoaXMuaWRCbG9jay50YWdDbGFzcyA9PT0gM1xyXG4gICAgICAgICAgICA/IGBbJHt0aGlzLmlkQmxvY2sudGFnTnVtYmVyfV1gXHJcbiAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYCR7YmxvY2tOYW1lfSA6XFxuJHt2YWx1ZXMuam9pbihcIlxcblwiKX1gXHJcbiAgICAgICAgICAgIDogYCR7YmxvY2tOYW1lfSA6YDtcclxuICAgIH1cclxufVxyXG5fYSR2ID0gQ29uc3RydWN0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ29uc3RydWN0ZWQgPSBfYSR2O1xyXG59KSgpO1xyXG5Db25zdHJ1Y3RlZC5OQU1FID0gXCJDT05TVFJVQ1RFRFwiO1xuXG5jbGFzcyBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxufVxyXG5Mb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sub3ZlcnJpZGUgPSBcIkVuZE9mQ29udGVudFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHU7XHJcbmNsYXNzIEVuZE9mQ29udGVudCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDA7XHJcbiAgICB9XHJcbn1cclxuX2EkdSA9IEVuZE9mQ29udGVudDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQgPSBfYSR1O1xyXG59KSgpO1xyXG5FbmRPZkNvbnRlbnQuTkFNRSA9IEVORF9PRl9DT05URU5UX05BTUU7XG5cbnZhciBfYSR0O1xyXG5jbGFzcyBOdWxsIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOb24temVybyBsZW5ndGggb2YgdmFsdWUgYmxvY2sgZm9yIE51bGwgdHlwZVwiKTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIGlmICgoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCkgPiBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDIpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDA1O1xyXG4gICAgICAgICAgICByZXRWaWV3WzFdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdyaXRlcikge1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUocmV0QnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkdCA9IE51bGw7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVsbCA9IF9hJHQ7XHJcbn0pKCk7XHJcbk51bGwuTkFNRSA9IFwiTlVMTFwiO1xuXG5jbGFzcyBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtZXRlcnMudmFsdWVIZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB0aGlzLnZhbHVlSGV4Vmlldykge1xyXG4gICAgICAgICAgICBpZiAob2N0ZXQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1swXSA9IHZhbHVlID8gMHhGRiA6IDB4MDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiQm9vbGVhbiB2YWx1ZSBlbmNvZGVkIGluIG1vcmUgdGhlbiAxIG9jdGV0XCIpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCb29sZWFuVmFsdWVCbG9jay5OQU1FID0gXCJCb29sZWFuVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcztcclxuY2xhc3MgQm9vbGVhbiBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMuZ2V0VmFsdWV9YDtcclxuICAgIH1cclxufVxyXG5fYSRzID0gQm9vbGVhbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Cb29sZWFuID0gX2EkcztcclxufSkoKTtcclxuQm9vbGVhbi5OQU1FID0gXCJCT09MRUFOXCI7XG5cbmNsYXNzIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gMDtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdGhpcy52YWx1ZVtpXS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIE9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gT0NURVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJPY3RldFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHI7XHJcbmNsYXNzIE9jdGV0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnQgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgT2N0ZXRTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29udGVudC52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIuY29uY2F0KGFycmF5KTtcclxuICAgIH1cclxufVxyXG5fYSRyID0gT2N0ZXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2N0ZXRTdHJpbmcgPSBfYSRyO1xyXG59KSgpO1xyXG5PY3RldFN0cmluZy5OQU1FID0gT0NURVRfU1RSSU5HX05BTUU7XG5cbmNsYXNzIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHVudXNlZEJpdHMgPSAwLCBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSB0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAtMTtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdmFsdWUuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gQklUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLnVudXNlZEJpdHMgPiAwKSAmJiAodmFsdWVCbG9jay51bnVzZWRCaXRzID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVc2luZyBvZiBcXFwidW51c2VkIGJpdHNcXFwiIGluc2lkZSBjb25zdHJ1Y3RpdmUgQklUIFNUUklORyBhbGxvd2VkIGZvciBsZWFzdCBvbmUgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHZhbHVlQmxvY2sudW51c2VkQml0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGludEJ1ZmZlclswXTtcclxuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzID4gNykge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbnVzZWQgYml0cyBmb3IgQml0U3RyaW5nIG11c3QgYmUgaW4gcmFuZ2UgMC03XCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnVudXNlZEJpdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSAoaW5wdXRMZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnRCdWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gdGhpcy51bnVzZWRCaXRzO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHRoaXMudmFsdWVIZXhWaWV3LCAxKTtcclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cyxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJpdFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHE7XHJcbmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVIZXggPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgdmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgICAgIGJpdHMucHVzaChieXRlLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYml0c1N0ciA9IGJpdHMuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke2JpdHNTdHIuc3Vic3RyaW5nKDAsIGJpdHNTdHIubGVuZ3RoIC0gdGhpcy52YWx1ZUJsb2NrLnVudXNlZEJpdHMpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9hJHEgPSBCaXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQml0U3RyaW5nID0gX2EkcTtcclxufSkoKTtcclxuQml0U3RyaW5nLk5BTUUgPSBCSVRfU1RSSU5HX05BTUU7XG5cbnZhciBfYSRwO1xyXG5mdW5jdGlvbiB2aWV3QWRkKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBsZXQgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgY29uc3QgbWF4ID0gKHNlY29uZFZpZXdDb3B5TGVuZ3RoIDwgZmlyc3RWaWV3Q29weUxlbmd0aCkgPyBmaXJzdFZpZXdDb3B5TGVuZ3RoIDogc2Vjb25kVmlld0NvcHlMZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gbWF4OyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPCBzZWNvbmRWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY1swXSA9IHZhbHVlIC8gMTA7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPj0gZmlyc3RWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcobmV3IFVpbnQ4QXJyYXkoW3ZhbHVlICUgMTBdKSwgZmlyc3RWaWV3Q29weSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgJSAxMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZmlyc3RWaWV3Q29weSk7XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weTtcclxufVxyXG5mdW5jdGlvbiBwb3dlcjIobikge1xyXG4gICAgaWYgKG4gPj0gcG93ZXJzMi5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gcG93ZXJzMi5sZW5ndGg7IHAgPD0gbjsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gKHBvd2VyczJbcCAtIDFdKS5zbGljZSgwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChkaWdpdHMubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBVaW50OEFycmF5KFsoZGlnaXRzW2ldIDw8IDEpICsgY1swXV0pO1xyXG4gICAgICAgICAgICAgICAgY1swXSA9IG5ld1ZhbHVlWzBdIC8gMTA7XHJcbiAgICAgICAgICAgICAgICBkaWdpdHNbaV0gPSBuZXdWYWx1ZVswXSAlIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZGlnaXRzKTtcclxuICAgICAgICAgICAgcG93ZXJzMi5wdXNoKGRpZ2l0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvd2VyczJbbl07XHJcbn1cclxuZnVuY3Rpb24gdmlld1N1YihmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBsZXQgYiA9IDA7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHNlY29uZFZpZXdDb3B5TGVuZ3RoOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICh2YWx1ZSA8IDApOlxyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYiA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gKGZpcnN0Vmlld0NvcHlMZW5ndGggLSBzZWNvbmRWaWV3Q29weUxlbmd0aCArIDEpOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHkuc2xpY2UoKTtcclxufVxyXG5jbGFzcyBMb2NhbEludGVnZXJWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0VmFsdWVIZXgoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgSW50ZWdlciBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVEZWModikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gdjtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ1dGlscy51dGlsRW5jb2RlVEModikpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlRGVjKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21ERVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCwgZXhwZWN0ZWRMZW5ndGggPSAwKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApICE9PSAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCA8IGV4cGVjdGVkTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKSA+IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVuZ3RoID0gdmlldy5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9ERVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gJiAweDgwKSAhPT0gMCk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXcuc2V0KHZpZXcsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdXBkYXRlZFZpZXc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApID09PSAwKSk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b0JFUihzaXplT25seSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCaXQgPSAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLSAxO1xyXG4gICAgICAgIGxldCBkaWdpdHMgPSBuZXcgVWludDhBcnJheSgodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLyAzKTtcclxuICAgICAgICBsZXQgYml0TnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJ5dGU7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGJ5dGVOdW1iZXIgPSAoYXNuMVZpZXcuYnl0ZUxlbmd0aCAtIDEpOyBieXRlTnVtYmVyID49IDA7IGJ5dGVOdW1iZXItLSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGFzbjFWaWV3W2J5dGVOdW1iZXJdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChjdXJyZW50Qnl0ZSAmIDEpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiaXROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmaXJzdEJpdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdTdWIocG93ZXIyKGJpdE51bWJlciksIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIi1cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld0FkZChkaWdpdHMsIHBvd2VyMihiaXROdW1iZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiaXROdW1iZXIrKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCeXRlID4+PSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChkaWdpdHNbaV0pXHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdChkaWdpdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmxhZyA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KDApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuX2EkcCA9IExvY2FsSW50ZWdlclZhbHVlQmxvY2s7XHJcbkxvY2FsSW50ZWdlclZhbHVlQmxvY2suTkFNRSA9IFwiSW50ZWdlclZhbHVlQmxvY2tcIjtcclxuKCgpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYSRwLnByb3RvdHlwZSwgXCJ2YWx1ZUhleFwiLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHYpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufSkoKTtcblxudmFyIF9hJG87XHJcbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjtcclxuICAgIH1cclxuICAgIHRvQmlnSW50KCkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21CaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBjb25zdCBiaWdJbnRWYWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XHJcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBjb25zdCBoZXggPSBiaWdJbnRWYWx1ZS50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLCBcIlwiKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChoZXgpKTtcclxuICAgICAgICBpZiAoYmlnSW50VmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFVpbnQ4QXJyYXkodmlldy5sZW5ndGggKyAodmlld1swXSAmIDB4ODAgPyAxIDogMCkpO1xyXG4gICAgICAgICAgICBmaXJzdFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdEludCA9IEJpZ0ludChgMHgke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KGZpcnN0KX1gKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSW50ID0gZmlyc3RJbnQgKyBiaWdJbnRWYWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChzZWNvbmRJbnQudG9TdHJpbmcoMTYpKSk7XHJcbiAgICAgICAgICAgIHNlY29uZFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoc2Vjb25kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFswXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh2aWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogd3JpdGVyLmZpbmFsKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGNvbnZlcnRUb0RFUigpIHtcclxuICAgICAgICBjb25zdCBpbnRlZ2VyID0gbmV3IEludGVnZXIoeyB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyB9KTtcclxuICAgICAgICBpbnRlZ2VyLnZhbHVlQmxvY2sudG9ERVIoKTtcclxuICAgICAgICByZXR1cm4gaW50ZWdlcjtcclxuICAgIH1cclxuICAgIGNvbnZlcnRGcm9tREVSKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3WzBdID09PSAwXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSlcclxuICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCl9YDtcclxuICAgIH1cclxufVxyXG5fYSRvID0gSW50ZWdlcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JbnRlZ2VyID0gX2EkbztcclxufSkoKTtcclxuSW50ZWdlci5OQU1FID0gXCJJTlRFR0VSXCI7XG5cbnZhciBfYSRuO1xyXG5jbGFzcyBFbnVtZXJhdGVkIGV4dGVuZHMgSW50ZWdlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMDtcclxuICAgIH1cclxufVxyXG5fYSRuID0gRW51bWVyYXRlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbnVtZXJhdGVkID0gX2EkbjtcclxufSkoKTtcclxuRW51bWVyYXRlZC5OQU1FID0gXCJFTlVNRVJBVEVEXCI7XG5cbmNsYXNzIExvY2FsU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAtMSwgaXNGaXJzdFNpZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgICAgICB0aGlzLmlzRmlyc3RTaWQgPSBpc0ZpcnN0U2lkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBsZXQgYml0cyA9IEJpZ0ludCh2YWx1ZSkudG9TdHJpbmcoMik7XHJcbiAgICAgICAgd2hpbGUgKGJpdHMubGVuZ3RoICUgNykge1xyXG4gICAgICAgICAgICBiaXRzID0gXCIwXCIgKyBiaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpdHMubGVuZ3RoIC8gNyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBieXRlc1tpXSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaSAqIDcsIGkgKiA3ICsgNyksIDIpICsgKGkgKyAxIDwgYnl0ZXMubGVuZ3RoID8gMHg4MCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CRVIoYnl0ZXMuYnVmZmVyLCAwLCBieXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXc7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFNpZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpZFZhbHVlID0gdGhpcy52YWx1ZURlYztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDM5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMC5cIjtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDc5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMS5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjIuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgICAgIGlzRmlyc3RTaWQ6IHRoaXMuaXNGaXJzdFNpZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2lkVmFsdWVCbG9jay5OQU1FID0gXCJzaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gdGhpcy52YWx1ZVswXTtcclxuICAgICAgICAgICAgICAgIGxldCBwbHVzID0gMDtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkQmxvY2sudmFsdWVEZWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTSUQgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWRTSUQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VkU0lEICsgcGx1cztcclxuICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpZCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkVmFsdWUgPSBCaWdJbnQoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZUJpZ0ludCA9IHNpZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtpXS5pc0ZpcnN0U2lkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAyLnske3NpZFN0cn0gLSA4MH1gO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbTtcclxuY2xhc3MgT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA2O1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbSA9IE9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllciA9IF9hJG07XHJcbn0pKCk7XHJcbk9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiT0JKRUNUIElERU5USUZJRVJcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IDAsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2suTkFNRSA9IFwicmVsYXRpdmVTaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbDtcclxuY2xhc3MgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTM7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRsID0gUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciA9IF9hJGw7XHJcbn0pKCk7XHJcblJlbGF0aXZlT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJcIjtcblxudmFyIF9hJGs7XHJcbmNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTY7XHJcbiAgICB9XHJcbn1cclxuX2EkayA9IFNlcXVlbmNlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNlcXVlbmNlID0gX2EkaztcclxufSkoKTtcclxuU2VxdWVuY2UuTkFNRSA9IFwiU0VRVUVOQ0VcIjtcblxudmFyIF9hJGo7XHJcbmNsYXNzIFNldCBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE3O1xyXG4gICAgfVxyXG59XHJcbl9hJGogPSBTZXQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2V0ID0gX2EkajtcclxufSkoKTtcclxuU2V0Lk5BTUUgPSBcIlNFVFwiO1xuXG5jbGFzcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU2ltcGxlU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW4gPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW4pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nQmxvY2suTkFNRSA9IFwiU0lNUExFIFNUUklOR1wiO1xuXG5jbGFzcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjhTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGBFcnJvciBkdXJpbmcgXCJkZWNvZGVVUklDb21wb25lbnRcIjogJHtleH0sIHVzaW5nIHJhdyBzdHJpbmdgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9CaW5hcnkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlV0ZjhTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRpO1xyXG5jbGFzcyBVdGY4U3RyaW5nIGV4dGVuZHMgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMjtcclxuICAgIH1cclxufVxyXG5fYSRpID0gVXRmOFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VdGY4U3RyaW5nID0gX2EkaTtcclxufSkoKTtcclxuVXRmOFN0cmluZy5OQU1FID0gXCJVVEY4U3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmMTZTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGYxNlN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm1wU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCbXBTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRoO1xyXG5jbGFzcyBCbXBTdHJpbmcgZXh0ZW5kcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMwO1xyXG4gICAgfVxyXG59XHJcbl9hJGggPSBCbXBTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm1wU3RyaW5nID0gX2EkaDtcclxufSkoKTtcclxuQm1wU3RyaW5nLk5BTUUgPSBcIkJNUFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjb3B5QnVmZmVyID0gQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0QnVmZmVyKSA/IGlucHV0QnVmZmVyLnNsaWNlKCkuYnVmZmVyIDogaW5wdXRCdWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29weUJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVZpZXcubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2ldID0gdmFsdWVWaWV3W2kgKyAzXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAxXSA9IHZhbHVlVmlld1tpICsgMl07XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMl0gPSAweDAwO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDNdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDMyQXJyYXkoY29weUJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbmd0aCA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuZ3RoICogNCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSksIDgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvZGVCdWYpO1xyXG4gICAgICAgICAgICBpZiAoY29kZVZpZXcubGVuZ3RoID4gNClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBkaWYgPSA0IC0gY29kZVZpZXcubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGNvZGVWaWV3Lmxlbmd0aCAtIDEpOyBqID49IDA7IGotLSlcclxuICAgICAgICAgICAgICAgIHZhbHVlSGV4Vmlld1tpICogNCArIGogKyBkaWZdID0gY29kZVZpZXdbal07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRnO1xyXG5jbGFzcyBVbml2ZXJzYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI4O1xyXG4gICAgfVxyXG59XHJcbl9hJGcgPSBVbml2ZXJzYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nID0gX2EkZztcclxufSkoKTtcclxuVW5pdmVyc2FsU3RyaW5nLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuXG52YXIgX2EkZjtcclxuY2xhc3MgTnVtZXJpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTg7XHJcbiAgICB9XHJcbn1cclxuX2EkZiA9IE51bWVyaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZyA9IF9hJGY7XHJcbn0pKCk7XHJcbk51bWVyaWNTdHJpbmcuTkFNRSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuXG52YXIgX2EkZTtcclxuY2xhc3MgUHJpbnRhYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxOTtcclxuICAgIH1cclxufVxyXG5fYSRlID0gUHJpbnRhYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZyA9IF9hJGU7XHJcbn0pKCk7XHJcblByaW50YWJsZVN0cmluZy5OQU1FID0gXCJQcmludGFibGVTdHJpbmdcIjtcblxudmFyIF9hJGQ7XHJcbmNsYXNzIFRlbGV0ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIwO1xyXG4gICAgfVxyXG59XHJcbl9hJGQgPSBUZWxldGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmcgPSBfYSRkO1xyXG59KSgpO1xyXG5UZWxldGV4U3RyaW5nLk5BTUUgPSBcIlRlbGV0ZXhTdHJpbmdcIjtcblxudmFyIF9hJGM7XHJcbmNsYXNzIFZpZGVvdGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMTtcclxuICAgIH1cclxufVxyXG5fYSRjID0gVmlkZW90ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmcgPSBfYSRjO1xyXG59KSgpO1xyXG5WaWRlb3RleFN0cmluZy5OQU1FID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuXG52YXIgX2EkYjtcclxuY2xhc3MgSUE1U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMjtcclxuICAgIH1cclxufVxyXG5fYSRiID0gSUE1U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLklBNVN0cmluZyA9IF9hJGI7XHJcbn0pKCk7XHJcbklBNVN0cmluZy5OQU1FID0gXCJJQTVTdHJpbmdcIjtcblxudmFyIF9hJGE7XHJcbmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI1O1xyXG4gICAgfVxyXG59XHJcbl9hJGEgPSBHcmFwaGljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmcgPSBfYSRhO1xyXG59KSgpO1xyXG5HcmFwaGljU3RyaW5nLk5BTUUgPSBcIkdyYXBoaWNTdHJpbmdcIjtcblxudmFyIF9hJDk7XHJcbmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI2O1xyXG4gICAgfVxyXG59XHJcbl9hJDkgPSBWaXNpYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpc2libGVTdHJpbmcgPSBfYSQ5O1xyXG59KSgpO1xyXG5WaXNpYmxlU3RyaW5nLk5BTUUgPSBcIlZpc2libGVTdHJpbmdcIjtcblxudmFyIF9hJDg7XHJcbmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI3O1xyXG4gICAgfVxyXG59XHJcbl9hJDggPSBHZW5lcmFsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmcgPSBfYSQ4O1xyXG59KSgpO1xyXG5HZW5lcmFsU3RyaW5nLk5BTUUgPSBcIkdlbmVyYWxTdHJpbmdcIjtcblxudmFyIF9hJDc7XHJcbmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjk7XHJcbiAgICB9XHJcbn1cclxuX2EkNyA9IENoYXJhY3RlclN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmcgPSBfYSQ3O1xyXG59KSgpO1xyXG5DaGFyYWN0ZXJTdHJpbmcuTkFNRSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG5cbnZhciBfYSQ2O1xyXG5jbGFzcyBVVENUaW1lIGV4dGVuZHMgVmlzaWJsZVN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCB2YWx1ZURhdGUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gMDtcclxuICAgICAgICB0aGlzLm1vbnRoID0gMDtcclxuICAgICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gMDtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSAwO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbaV0gPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWVEYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUodmFsdWVEYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudG9CdWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSkpO1xyXG4gICAgfVxyXG4gICAgdG9CdWZmZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHIubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICB0aGlzLnllYXIgPSBpbnB1dERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICB0aGlzLm1vbnRoID0gaW5wdXREYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gaW5wdXREYXRlLmdldFVUQ0RhdGUoKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBpbnB1dERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IGlucHV0RGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IC8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSlaL2lnO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoaW5wdXRTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMV0sIDEwKTtcclxuICAgICAgICBpZiAoeWVhciA+PSA1MClcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMTkwMCArIHllYXI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAyMDAwICsgeWVhcjtcclxuICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMl0sIDEwKTtcclxuICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzNdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNF0sIDEwKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzVdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVs2XSwgMTApO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IEFycmF5KDcpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVswXSA9IHB2dXRpbHMucGFkTnVtYmVyKCgodGhpcy55ZWFyIDwgMjAwMCkgPyAodGhpcy55ZWFyIC0gMTkwMCkgOiAodGhpcy55ZWFyIC0gMjAwMCkpLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMl0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzNdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNF0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzVdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs2XSA9IFwiWlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMueWVhcixcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy5kYXksXHJcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcclxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcclxuICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDYgPSBVVENUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVUQ1RpbWUgPSBfYSQ2O1xyXG59KSgpO1xyXG5VVENUaW1lLk5BTUUgPSBcIlVUQ1RpbWVcIjtcblxudmFyIF9hJDU7XHJcbmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIFVUQ1RpbWUge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iO1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIChfYiA9IHRoaXMubWlsbGlzZWNvbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICh0aGlzLm1pbGxpc2Vjb25kID0gMCk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjQ7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICBzdXBlci5mcm9tRGF0ZShpbnB1dERhdGUpO1xyXG4gICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzVVRDID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBkYXRlVGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IDA7XHJcbiAgICAgICAgbGV0IHBhcnNlcjtcclxuICAgICAgICBsZXQgaG91ckRpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGxldCBtaW51dGVEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBpZiAoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiWlwiKSB7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZy5zdWJzdHJpbmcoMCwgaW5wdXRTdHJpbmcubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGlzVVRDID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IG5ldyBOdW1iZXIoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiK1wiKTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKGRpZmZlcmVuY2VQb3NpdGlvbiArIDEpO1xyXG4gICAgICAgICAgICAgICAgdGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGRpZmZlcmVuY2VQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSAyKSAmJiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygwLCAyKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGhvdXJEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi5cIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9PT0gLTEpXHJcbiAgICAgICAgICAgIGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIixcIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25QYXJ0Q2hlY2sgPSBuZXcgTnVtYmVyKGAwJHt0aW1lU3RyaW5nLnN1YnN0cmluZyhmcmFjdGlvblBvaW50UG9zaXRpb24pfWApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpO1xyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGZyYWN0aW9uUG9pbnRQb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDgpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEwKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDYwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5taW51dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEyKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxNCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoZGF0ZVRpbWVTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyc2VyQXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIGhvdXJEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIG1pbnV0ZURpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKTtcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gdGVtcERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tb250aCA9IHRlbXBEYXRlLmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF5ID0gdGVtcERhdGUuZ2V0VVRDRGF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG91ciA9IHRlbXBEYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlID0gdGVtcERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMueWVhciwgNCkpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWlsbGlzZWNvbmQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbGxpc2Vjb25kLCAzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIlpcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBtaWxsaXNlY29uZDogdGhpcy5taWxsaXNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDUgPSBHZW5lcmFsaXplZFRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lID0gX2EkNTtcclxufSkoKTtcclxuR2VuZXJhbGl6ZWRUaW1lLk5BTUUgPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuXG52YXIgX2EkNDtcclxuY2xhc3MgREFURSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzE7XHJcbiAgICB9XHJcbn1cclxuX2EkNCA9IERBVEU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuREFURSA9IF9hJDQ7XHJcbn0pKCk7XHJcbkRBVEUuTkFNRSA9IFwiREFURVwiO1xuXG52YXIgX2EkMztcclxuY2xhc3MgVGltZU9mRGF5IGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMjtcclxuICAgIH1cclxufVxyXG5fYSQzID0gVGltZU9mRGF5O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRpbWVPZkRheSA9IF9hJDM7XHJcbn0pKCk7XHJcblRpbWVPZkRheS5OQU1FID0gXCJUaW1lT2ZEYXlcIjtcblxudmFyIF9hJDI7XHJcbmNsYXNzIERhdGVUaW1lIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMztcclxuICAgIH1cclxufVxyXG5fYSQyID0gRGF0ZVRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRGF0ZVRpbWUgPSBfYSQyO1xyXG59KSgpO1xyXG5EYXRlVGltZS5OQU1FID0gXCJEYXRlVGltZVwiO1xuXG52YXIgX2EkMTtcclxuY2xhc3MgRHVyYXRpb24gZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM0O1xyXG4gICAgfVxyXG59XHJcbl9hJDEgPSBEdXJhdGlvbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EdXJhdGlvbiA9IF9hJDE7XHJcbn0pKCk7XHJcbkR1cmF0aW9uLk5BTUUgPSBcIkR1cmF0aW9uXCI7XG5cbnZhciBfYTtcclxuY2xhc3MgVElNRSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTQ7XHJcbiAgICB9XHJcbn1cclxuX2EgPSBUSU1FO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRJTUUgPSBfYTtcclxufSkoKTtcclxuVElNRS5OQU1FID0gXCJUSU1FXCI7XG5cbmNsYXNzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIENob2ljZSBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJlcGVhdGVkIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBuZXcgQW55KCksIGxvY2FsID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSYXdEYXRhIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgZGF0YSA9IEVNUFRZX1ZJRVcgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBDaG9pY2UpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0U2NoZW1hLnZhbHVlLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYS52YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIldyb25nIHZhbHVlcyBmb3IgQ2hvaWNlIHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQW55KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChyb290IGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyByb290IG9iamVjdFwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dERhdGEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIGRhdGFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChJRF9CTE9DSyBpbiBpbnB1dFNjaGVtYSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKEZST01fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChUT19CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmNvZGVkSWQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnRvQkVSKGZhbHNlKTtcclxuICAgIGlmIChlbmNvZGVkSWQuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGVuY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVjb2RlZE9mZnNldCA9IGlucHV0U2NoZW1hLmlkQmxvY2suZnJvbUJFUihlbmNvZGVkSWQsIDAsIGVuY29kZWRJZC5ieXRlTGVuZ3RoKTtcclxuICAgIGlmIChkZWNvZGVkT2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGRlY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX0NMQVNTKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ0NsYXNzICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19OVU1CRVIpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShJU19DT05TVFJVQ1RFRCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0NvbnN0cnVjdGVkICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCEoSVNfSEVYX09OTFkgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgaWYgKChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYVZpZXcgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IGlucHV0RGF0YS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoc2NoZW1hVmlldy5sZW5ndGggIT09IGFzbjFWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hVmlldy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hVmlld1tpXSAhPT0gYXNuMVZpZXdbMV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGxldCBhZG1pc3Npb24gPSAwO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJVbmtub3duIGVycm9yXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggPT09IDApICYmXHJcbiAgICAgICAgICAgIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCAhPT0gMCkpIHtcclxuICAgICAgICAgICAgbGV0IF9vcHRpb25hbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIF9vcHRpb25hbCA9IF9vcHRpb25hbCAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCB8fCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9uYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgoaSAtIGFkbWlzc2lvbikgPj0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IGxlbmd0aCBiZXR3ZWVuIEFTTi4xIGRhdGEgYW5kIHNjaGVtYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKE5BTUUgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlSb290ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTE9DQUwgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubG9jYWwpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gaW5wdXREYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID09PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0ucHVzaChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpIC0gYWRtaXNzaW9uXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEgJiZcclxuICAgICAgICAoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXREYXRhLnZhbHVlQmxvY2spKSB7XHJcbiAgICAgICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlU2NoZW1hKHJvb3QsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdmVyaWZ5U2NoZW1hKGlucHV0QnVmZmVyLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hIHR5cGVcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEoYXNuMS5yZXN1bHQsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYSk7XHJcbn1cblxuZXhwb3J0IHsgQW55LCBCYXNlQmxvY2ssIEJhc2VTdHJpbmdCbG9jaywgQml0U3RyaW5nLCBCbXBTdHJpbmcsIEJvb2xlYW4sIENoYXJhY3RlclN0cmluZywgQ2hvaWNlLCBDb25zdHJ1Y3RlZCwgREFURSwgRGF0ZVRpbWUsIER1cmF0aW9uLCBFbmRPZkNvbnRlbnQsIEVudW1lcmF0ZWQsIEdlbmVyYWxTdHJpbmcsIEdlbmVyYWxpemVkVGltZSwgR3JhcGhpY1N0cmluZywgSGV4QmxvY2ssIElBNVN0cmluZywgSW50ZWdlciwgTnVsbCwgTnVtZXJpY1N0cmluZywgT2JqZWN0SWRlbnRpZmllciwgT2N0ZXRTdHJpbmcsIFByaW1pdGl2ZSwgUHJpbnRhYmxlU3RyaW5nLCBSYXdEYXRhLCBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIsIFJlcGVhdGVkLCBTZXF1ZW5jZSwgU2V0LCBUSU1FLCBUZWxldGV4U3RyaW5nLCBUaW1lT2ZEYXksIFVUQ1RpbWUsIFVuaXZlcnNhbFN0cmluZywgVXRmOFN0cmluZywgVmFsdWVCbG9jaywgVmlkZW90ZXhTdHJpbmcsIFZpZXdXcml0ZXIsIFZpc2libGVTdHJpbmcsIGNvbXBhcmVTY2hlbWEsIGZyb21CRVIsIHZlcmlmeVNjaGVtYSB9O1xuIiwgImV4cG9ydCB2YXIgQXNuVHlwZVR5cGVzO1xuKGZ1bmN0aW9uIChBc25UeXBlVHlwZXMpIHtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2VxdWVuY2VcIl0gPSAwXSA9IFwiU2VxdWVuY2VcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2V0XCJdID0gMV0gPSBcIlNldFwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJDaG9pY2VcIl0gPSAyXSA9IFwiQ2hvaWNlXCI7XG59KShBc25UeXBlVHlwZXMgfHwgKEFzblR5cGVUeXBlcyA9IHt9KSk7XG5leHBvcnQgdmFyIEFzblByb3BUeXBlcztcbihmdW5jdGlvbiAoQXNuUHJvcFR5cGVzKSB7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkFueVwiXSA9IDFdID0gXCJBbnlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDJdID0gXCJCb29sZWFuXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9jdGV0U3RyaW5nXCJdID0gM10gPSBcIk9jdGV0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJpdFN0cmluZ1wiXSA9IDRdID0gXCJCaXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSW50ZWdlclwiXSA9IDVdID0gXCJJbnRlZ2VyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkVudW1lcmF0ZWRcIl0gPSA2XSA9IFwiRW51bWVyYXRlZFwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPYmplY3RJZGVudGlmaWVyXCJdID0gN10gPSBcIk9iamVjdElkZW50aWZpZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVXRmOFN0cmluZ1wiXSA9IDhdID0gXCJVdGY4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJtcFN0cmluZ1wiXSA9IDldID0gXCJCbXBTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVW5pdmVyc2FsU3RyaW5nXCJdID0gMTBdID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVtZXJpY1N0cmluZ1wiXSA9IDExXSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJQcmludGFibGVTdHJpbmdcIl0gPSAxMl0gPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUZWxldGV4U3RyaW5nXCJdID0gMTNdID0gXCJUZWxldGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpZGVvdGV4U3RyaW5nXCJdID0gMTRdID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJQTVTdHJpbmdcIl0gPSAxNV0gPSBcIklBNVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHcmFwaGljU3RyaW5nXCJdID0gMTZdID0gXCJHcmFwaGljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpc2libGVTdHJpbmdcIl0gPSAxN10gPSBcIlZpc2libGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbFN0cmluZ1wiXSA9IDE4XSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJDaGFyYWN0ZXJTdHJpbmdcIl0gPSAxOV0gPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVVENUaW1lXCJdID0gMjBdID0gXCJVVENUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxpemVkVGltZVwiXSA9IDIxXSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRBVEVcIl0gPSAyMl0gPSBcIkRBVEVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGltZU9mRGF5XCJdID0gMjNdID0gXCJUaW1lT2ZEYXlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRGF0ZVRpbWVcIl0gPSAyNF0gPSBcIkRhdGVUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkR1cmF0aW9uXCJdID0gMjVdID0gXCJEdXJhdGlvblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUSU1FXCJdID0gMjZdID0gXCJUSU1FXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bGxcIl0gPSAyN10gPSBcIk51bGxcIjtcbn0pKEFzblByb3BUeXBlcyB8fCAoQXNuUHJvcFR5cGVzID0ge30pKTtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIEJpdFN0cmluZyB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zLCB1bnVzZWRCaXRzID0gMCkge1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAwO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZSBvZiAncGFyYW1zJyBhcmd1bWVudCBmb3IgQml0U3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5CaXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBhc24udmFsdWVCbG9jay51bnVzZWRCaXRzO1xuICAgICAgICB0aGlzLnZhbHVlID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLCB2YWx1ZUhleDogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHVpbnRBcnJheSkge1xuICAgICAgICAgICAgcmVzICs9IG9jdGV0LnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSh0aGlzLnVudXNlZEJpdHMpLnBhZFN0YXJ0KHRoaXMudW51c2VkQml0cywgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXMsIDIpO1xuICAgIH1cbiAgICBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBiaXRzID0gdmFsdWUudG9TdHJpbmcoMik7XG4gICAgICAgIGNvbnN0IG9jdGV0U2l6ZSA9IChiaXRzLmxlbmd0aCArIDcpID4+IDM7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IChvY3RldFNpemUgPDwgMykgLSBiaXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb2N0ZXRzID0gbmV3IFVpbnQ4QXJyYXkob2N0ZXRTaXplKTtcbiAgICAgICAgYml0cyA9IGJpdHMucGFkU3RhcnQob2N0ZXRTaXplIDw8IDMsIFwiMFwiKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgb2N0ZXRTaXplKSB7XG4gICAgICAgICAgICBvY3RldHNbaW5kZXhdID0gcGFyc2VJbnQoYml0cy5zbGljZShpbmRleCA8PCAzLCAoaW5kZXggPDwgMykgKyA4KSwgMik7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBvY3RldHMuYnVmZmVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIE9jdGV0U3RyaW5nIHtcbiAgICBnZXQgYnl0ZUxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGdldCBieXRlT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheShwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuT2N0ZXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIE9jdGV0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdGhpcy5idWZmZXIgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9iaXRfc3RyaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vY3RldF9zdHJpbmdcIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IE9jdGV0U3RyaW5nIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCBjb25zdCBBc25BbnlDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gbnVsbCA6IHZhbHVlLnZhbHVlQmVmb3JlRGVjb2RlVmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGFzbjFqcy5mcm9tQkVSKHZhbHVlKTtcbiAgICAgICAgaWYgKHNjaGVtYS5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzY2hlbWEucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hLnJlc3VsdDtcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA+PSA0XG4gICAgICAgID8gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpXG4gICAgICAgIDogdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZTogK3ZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25FbnVtZXJhdGVkQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkVudW1lcmF0ZWQoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQmlnSW50Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9CaWdJbnQoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBhc24xanMuSW50ZWdlci5mcm9tQmlnSW50KHZhbHVlKSxcbn07XG5leHBvcnQgY29uc3QgQXNuQml0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PYmplY3RJZGVudGlmaWVyKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJvb2xlYW5Db252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQm9vbGVhbih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkNvbnN0cnVjdGVkT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiBuZXcgT2N0ZXRTdHJpbmcodmFsdWUuZ2V0VmFsdWUoKSksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9BU04oKSxcbn07XG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoQXNuMVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBBc24xVHlwZSh7IHZhbHVlIH0pLFxuICAgIH07XG59XG5leHBvcnQgY29uc3QgQXNuVXRmOFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVXRmOFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQm1wU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5CbXBTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVW5pdmVyc2FsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5OdW1lcmljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlByaW50YWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVGVsZXRleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpZGVvdGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25JQTVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLklBNVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR3JhcGhpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlzaWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR2VuZXJhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5DaGFyYWN0ZXJTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVUQ1RpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLlVUQ1RpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkdlbmVyYWxpemVkVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk51bGxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKCkgPT4gbnVsbCxcbiAgICB0b0FTTjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgfSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENvbnZlcnRlcih0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkFueTpcbiAgICAgICAgICAgIHJldHVybiBBc25BbnlDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJpdFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CaXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJtcFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CbXBTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJvb2xlYW46XG4gICAgICAgICAgICByZXR1cm4gQXNuQm9vbGVhbkNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQ2hhcmFjdGVyU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuRW51bWVyYXRlZDpcbiAgICAgICAgICAgIHJldHVybiBBc25FbnVtZXJhdGVkQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxpemVkVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdyYXBoaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSUE1U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbklBNVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSW50ZWdlcjpcbiAgICAgICAgICAgIHJldHVybiBBc25JbnRlZ2VyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdWxsOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bGxDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bWVyaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcjpcbiAgICAgICAgICAgIHJldHVybiBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PY3RldFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25PY3RldFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuUHJpbnRhYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVGVsZXRleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VVENUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVUQ1RpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVuaXZlcnNhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlV0ZjhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVXRmOFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlkZW90ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpc2libGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gaXNDb252ZXJ0aWJsZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9BU04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tQVNOKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgJiYgXCJ0b0FTTlwiIGluIHRhcmdldCAmJiBcImZyb21BU05cIiBpbiB0YXJnZXQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVPZkFycmF5KHRhcmdldCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmICgoKF9hID0gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3RvLnByb3RvdHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cnVjdG9yKSA9PT0gQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1R5cGVPZkFycmF5KHByb3RvKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSB9IGZyb20gXCIuL2hlbHBlclwiO1xuZXhwb3J0IGNsYXNzIEFzblNjaGVtYVN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgaGFzKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5oYXModGFyZ2V0KTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCwgY2hlY2tTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgdGFyZ2V0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU2NoZW1hICYmICFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyBkb2Vzbid0IGNvbnRhaW4gQVNOLjEgc2NoZW1hLiBDYWxsICdBc25TY2hlbWFTdG9yYWdlLmNhY2hlJy5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjYWNoZSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuc2NoZW1hID0gdGhpcy5jcmVhdGUodGFyZ2V0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgICAgICB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsXG4gICAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IE9iamVjdC5hc3NpZ24oe30sIHNjaGVtYS5pdGVtcywgcGFyZW50U2NoZW1hLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjcmVhdGUodGFyZ2V0LCB1c2VOYW1lcykge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdXNlTmFtZXMgPyBrZXkgOiBcIlwiO1xuICAgICAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tpdGVtLnR5cGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgQVNOMSBjbGFzcyBieSBuYW1lICcke0FzbjFUeXBlTmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IEFzbjFUeXBlKHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGl0ZW0udHlwZSgpO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gaW5zdGFuY2UudG9TY2hlbWEobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVNjaGVtYSA9IHRoaXMuZ2V0KGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1TY2hlbWEudHlwZSA9PT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy5jcmVhdGUoaXRlbS50eXBlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSAhIWl0ZW0ub3B0aW9uYWwgfHwgaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZCA9PT0gXCJzZXRcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXRcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2VxdWVuY2U7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBhc24xanMuUmVwZWF0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5jb250ZXh0ICE9PSBudWxsICYmIGl0ZW0uY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuQ29uc3RydWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5QcmltaXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlKGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1JlcGVhdGVkID0gISFpdGVtLnJlcGVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gIWlzUmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0KGl0ZW0udHlwZSwgdHJ1ZSkuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJ2YWx1ZUJsb2NrXCIgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlIDogdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAhaXNSZXBlYXRlZCA/IG5hbWUgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQ2hvaWNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBU04xIHR5cGUgaW4gdXNlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0KHRhcmdldCwgc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQXNuU2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuZXhwb3J0IGNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgQXNuU2NoZW1hU3RvcmFnZSgpO1xuIiwgImltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY29uc3QgQXNuVHlwZSA9IChvcHRpb25zKSA9PiAodGFyZ2V0KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBvcHRpb25zKTtcbn07XG5leHBvcnQgY29uc3QgQXNuQ2hvaWNlVHlwZSA9ICgpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNldFR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXQsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuU2VxdWVuY2VUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuUHJvcCA9IChvcHRpb25zKSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhY29weU9wdGlvbnMuY29udmVydGVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIob3B0aW9ucy50eXBlKTtcbiAgICAgICAgaWYgKCFkZWZhdWx0Q29udmVydGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHByb3BlcnR5ICcke3Byb3BlcnR5S2V5fScgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb3B5T3B0aW9ucy5jb252ZXJ0ZXIgPSBkZWZhdWx0Q29udmVydGVyO1xuICAgIH1cbiAgICBzY2hlbWEuaXRlbXNbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XG59O1xuIiwgImV4cG9ydCBjbGFzcyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IFtdO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFfdmFsaWRhdGlvblwiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNUeXBlT2ZBcnJheSB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25QYXJzZXIge1xuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgYXNuMVBhcnNlZCA9IGFzbjFqcy5mcm9tQkVSKGRhdGEpO1xuICAgICAgICBpZiAoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhc24xUGFyc2VkLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5mcm9tQVNOKGFzbjFQYXJzZWQucmVzdWx0LCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFTTihhc24xU2NoZW1hLCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mcm9tQVNOKGFzbjFTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRTY2hlbWEgPSBzY2hlbWEuc2NoZW1hO1xuICAgICAgICAgICAgaWYgKGFzbjFTY2hlbWEuY29uc3RydWN0b3IgPT09IGFzbjFqcy5Db25zdHJ1Y3RlZCAmJiBzY2hlbWEudHlwZSAhPT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9IG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogYXNuMVNjaGVtYS5pZEJsb2NrLnRhZ051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNjaGVtYS5zY2hlbWEudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFzbjFTY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhc24xQ29tcGFyZWRTY2hlbWEgPSBhc24xanMuY29tcGFyZVNjaGVtYSh7fSwgYXNuMVNjaGVtYSwgdGFyZ2V0U2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghYXNuMUNvbXBhcmVkU2NoZW1hLnZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcihgRGF0YSBkb2VzIG5vdCBtYXRjaCB0byAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYS4gJHthc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgaWYgKGlzVHlwZU9mQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBhc24xU2NoZW1hLnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHNjaGVtYS5pdGVtVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihpdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBpdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFTY2hlbWFWYWx1ZSA9IGFzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFTY2hlbWFWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW1UeXBlID0gc2NoZW1hSXRlbS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbVR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gKF9hID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgc2NoZW1hSXRlbVR5cGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnRlciBpcyBlbXB0eVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBuZXcgQ29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gYXNuMVNjaGVtYVZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbUFzbiA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbUFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBjaGlsZCBpdGVtLiAke25ld0l0ZW1Bc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20odmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXNuMVNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBzY2hlbWFJdGVtVHlwZSgpLnRvU2NoZW1hKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW1UeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0ICcke0FzbjFUeXBlTmFtZX0nIGNsYXNzIGZyb20gYXNuMWpzIG1vZHVsZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgQXNuMVR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNvbnZlcnRlci5mcm9tQVNOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhc24xU2NoZW1hVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBsaXN0IG9mIGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgdmFsdWUgc2hvdWxkIGJlIGl0ZXJhYmxlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgc2NoZW1hSXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy5mcm9tQVNOKGFzbjFTY2hlbWFWYWx1ZSwgc2NoZW1hSXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnNjaGVtYXMucHVzaCh0YXJnZXQubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc0FycmF5RXF1YWwgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuU2VyaWFsaXplciB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIGFzbjFqcy5CYXNlQmxvY2spIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9CRVIoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvQVNOKG9iaikudG9CRVIoZmFsc2UpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BU04ob2JqKSB7XG4gICAgICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBpc0NvbnZlcnRpYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9BU04oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBPYmplY3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICBsZXQgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGlmIChzY2hlbWEuaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLml0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKHNjaGVtYS5pdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IGNvbnZlcnRlci50b0FTTihvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiB0aGlzLnRvQXNuSXRlbSh7IHR5cGU6IHNjaGVtYS5pdGVtVHlwZSB9LCBcIltdXCIsIHRhcmdldCwgbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3AgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAob2JqUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHx8IHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBvYmpQcm9wXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0eXBlb2Ygc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9ialByb3AgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQXJyYXlFcXVhbCh0aGlzLnNlcmlhbGl6ZShzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSksIHRoaXMuc2VyaWFsaXplKG9ialByb3ApKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFJdGVtID0gQXNuU2VyaWFsaXplci50b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS5jb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW0udHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZUhleCA9IGFzbjFJdGVtIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBhc24xSXRlbS52YWx1ZUJlZm9yZURlY29kZVZpZXcgOiBhc24xSXRlbS52YWx1ZUJsb2NrLnRvQkVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5QcmltaXRpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0udmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gYXNuMVZhbHVlLmNvbmNhdChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBhc25TY2hlbWE7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFWYWx1ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQubmFtZX0nIGhhcyB3cm9uZyBkYXRhLiBDaG9pY2UgY2Fubm90IGJlIGVtcHR5LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBhc24xVmFsdWVbMF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzblNjaGVtYTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCkge1xuICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaGVtYUl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IHNjaGVtYUl0ZW0uY29udmVydGVyO1xuICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2tleX0nIGRvZXNuJ3QgaGF2ZSBjb252ZXJ0ZXIgZm9yIHR5cGUgJHtBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbS50eXBlXX0gaW4gc2NoZW1hICcke3RhcmdldC5uYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBjb252ZXJ0ZXIudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gdGhpcy50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbjFJdGVtO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgQXNuQXJyYXkgZXh0ZW5kcyBBcnJheSB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMgPSBbXSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5pbXBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgY2xhc3MgQXNuQ29udmVydCB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgcmV0dXJuIEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG9iaik7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShkYXRhLCB0YXJnZXQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoZGF0YSlcbiAgICAgICAgICAgID8gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgIDogQXNuQ29udmVydC5zZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFzbiA9IGFzbjFqcy5mcm9tQkVSKGJ1Zik7XG4gICAgICAgIGlmIChhc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIEFTTi4xIGRhdGEuICR7YXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuLnJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IHsgQXNuUHJvcCwgQXNuVHlwZSwgQXNuQ2hvaWNlVHlwZSwgQXNuU2VxdWVuY2VUeXBlLCBBc25TZXRUeXBlIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0IHsgQXNuVHlwZVR5cGVzLCBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuZXhwb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5leHBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3RzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0XCI7XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJhc2U2NC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSA2NDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrLys9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChfYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmICghKGtleVVzYWdlcyAmJiBrZXlVc2FnZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXNhZ2VzIGNhbm5vdCBiZSBlbXB0eSB3aGVuIGNyZWF0aW5nIGEga2V5LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGxvd2VkVXNhZ2VzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcy5wcml2YXRlS2V5LmNvbmNhdCh0aGlzLnVzYWdlcy5wdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCBhbGxvd2VkVXNhZ2VzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImdlbmVyYXRlS2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1NpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tTaWduKGFsZ29yaXRobSwga2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25WZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KF9hbGdvcml0aG0sIF9rZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZW5jcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZXJpdmVCaXRzXCIgOiB2b2lkIDApO1xuICAgICAgICBpZiAobGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBJcyBub3QgbXVsdGlwbGUgb2YgOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoX2FsZ29yaXRobSwgX2Jhc2VLZXksIF9sZW5ndGgsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVyaXZlQml0c1wiKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KF9mb3JtYXQsIF9rZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgdGhpcy51c2FnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KF9mb3JtYXQsIF9rZXlEYXRhLCBfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiaW1wb3J0S2V5XCIpO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleVVzYWdlcyh1c2FnZXMsIGFsbG93ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkLmluZGV4T2YodXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5IHVzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBpZiAoa2V5VXNhZ2UgJiYga2V5LnVzYWdlcy5pbmRleE9mKGtleVVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihga2V5IGRvZXMgbm90IG1hdGNoIHRoYXQgb2Ygb3BlcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZFByb3BlcnR5KGRhdGEsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmICghKHByb3BOYW1lIGluIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBoYXNoOiBNdXN0IGJlIG9uZSBvZiAke2hhc2hBbGdvcml0aG1zLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleUZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZvcm1hdDogSXMgaW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAnandrJywgJ3JhdycsICdzcGtpJywgb3IgJ3BrY3M4J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKSB7XG4gICAgICAgIGlmICgha2V5RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBiZSBlbXB0eSBvbiBlbXB0eSBvbiBrZXkgaW1wb3J0aW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNKV0soa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpzb25XZWJUb2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEFycmF5QnVmZmVyVmlldyBvciBBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlRGF0YShkYXRhKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIDEyOCwgMTkyLCBvciAyNTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DQkNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DTUFDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ1RSXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImNvdW50ZXJcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5jb3VudGVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5jb3VudGVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb3VudGVyOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uY291bnRlci5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtRUNCXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUdDTVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInRhZ0xlbmd0aFwiIGluIGFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgIGFsZ29yaXRobS50YWdMZW5ndGggPSAxMjg7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0udGFnTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwidGFnTGVuZ3RoOiBNdXN0IGJlIG9uZSBvZiAzMiwgNjQsIDk2LCAxMDQsIDExMiwgMTIwIG9yIDEyOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtS1dcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaXY6IE11c3QgaGF2ZSBsZW5ndGggJHt0aGlzLml2U2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCAhPT0gdGhpcy5rZXlTaXplQml0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBhbGdvcml0aG0ubGVuZ3RoOiBNdXN0IGJlICR7dGhpcy5rZXlTaXplQml0c31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggJSA4XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA8IDI1NlxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPiAxNjM4NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBtb2R1bHVzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzIGFuZCA+PSAyNTYgYW5kIDw9IDE2Mzg0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBU1NBLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtUFNTXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRMZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLnNhbHRMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0TGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5zYWx0TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzYWx0TGVuZ3RoOiBNdXN0IGJlIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1PQUVQXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsXG4gICAgICAgICAgICAmJiAhKGFsZ29yaXRobS5sYWJlbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0ubGFiZWwpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxhYmVsOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHRpY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJuYW1lZEN1cnZlXCIpO1xuICAgICAgICB0aGlzLmNoZWNrTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgfVxuICAgIGNoZWNrTmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hbWVkQ3VydmVzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBuYW1lZEN1cnZlOiBNdXN0IGJlIG9uZSBvZiAke3RoaXMubmFtZWRDdXJ2ZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDRFNBXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jb25zdCBLRVlfVFlQRVMgPSBbXCJzZWNyZXRcIiwgXCJwcml2YXRlXCIsIFwicHVibGljXCJdO1xuY2xhc3MgQ3J5cHRvS2V5IHtcbiAgICBzdGF0aWMgY3JlYXRlKGFsZ29yaXRobSwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgdGhpcygpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkudHlwZSA9IHR5cGU7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNLZXlUeXBlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEtFWV9UWVBFUy5pbmRleE9mKGRhdGEpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9LZXlcIjtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREhcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpYyBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy50eXBlICE9PSBcInB1YmxpY1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIHB1YmxpYyBrZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMuYWxnb3JpdGhtLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBwdWJsaWM6IElzIG5vdCAke3RoaXMubmFtZX0ga2V5YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RILUVTXCI7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJYMjU1MTlcIiwgXCJYNDQ4XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkRFNBXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiRWQyNTUxOVwiLCBcIkVkNDQ4XCJdO1xuICAgIH1cbn1cblxubGV0IE9iamVjdElkZW50aWZpZXIgPSBjbGFzcyBPYmplY3RJZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIgfSlcbl0sIE9iamVjdElkZW50aWZpZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5PYmplY3RJZGVudGlmaWVyID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIE9iamVjdElkZW50aWZpZXIpO1xuXG5jbGFzcyBBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcixcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwiYWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLkFueSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHJpdmF0ZUtleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQdWJsaWNLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnB1YmxpY0tleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKG5ldyBVaW50OEFycmF5KHZhbHVlKSksXG59O1xuXG5jb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuICEobmV3IFVpbnQ4QXJyYXkodmFsdWVIZXgpWzBdKVxuICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4LnNsaWNlKDEpXG4gICAgICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpWzBdID4gMTI3XG4gICAgICAgICAgICA/IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzBdKS5idWZmZXIsIHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleCB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIsXG4gIEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyXG59KTtcblxuY2xhc3MgUnNhUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcml2YXRlRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmNvZWZmaWNpZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUV4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicWlcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImNvZWZmaWNpZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm90aGVyUHJpbWVJbmZvc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5cbmxldCBFY1B1YmxpY0tleSA9IGNsYXNzIEVjUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gIT09IDB4MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcIldyb25nIEVDUG9pbnQuIEN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyBvbmx5IFVuY29tcHJlc3NlZCAoMHgwNCkgcG9pbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlLnNsaWNlKDEpKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKSxcbiAgICAgICAgICAgIHk6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCArIHNpemUsIG9mZnNldCArIHNpemUgKyBzaXplKSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFwieVwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ5OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgY29uc3QgeSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLnkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzB4MDRdKS5idWZmZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWNQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWNQdWJsaWNLZXkpO1xuXG5jbGFzcyBFY1ByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJkXCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIGlmIChcInhcIiBpbiBqc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgICAgIHB1YmxpY0tleS5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgIGNvbnN0IGFzbiA9IEFzblNlcmlhbGl6ZXIudG9BU04ocHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlSGV4XCIgaW4gYXNuLnZhbHVlQmxvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHt9O1xuICAgICAgICBqd2suZCA9IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgaWYgKHRoaXMucHVibGljS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGp3aywgbmV3IEVjUHVibGljS2V5KHRoaXMucHVibGljS2V5KS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAwLCB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4KTtcbiAgICAgICAgcmV0dXJuIChieXRlc1swXSA9PT0gMClcbiAgICAgICAgICAgID8gYnl0ZXMuYnVmZmVyLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGJ5dGVzLmJ1ZmZlcjtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSA+IDEyNykge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShieXRlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnNldChieXRlcywgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiBuZXdWYWx1ZS5idWZmZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyXG59KTtcblxuY2xhc3MgRWNVdGlscyB7XG4gICAgc3RhdGljIGRlY29kZVBvaW50KGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKCh2aWV3Lmxlbmd0aCA9PT0gMCkgfHwgKHZpZXdbMF0gIT09IDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHVuY29tcHJlc3NlZCBwb2ludCBmb3JtYXQgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSAodmlldy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGlmIChuICE9PSAoTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgZG9lcyBub3QgbWF0Y2ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4YiA9IHZpZXcuc2xpY2UoMSwgbiArIDEpO1xuICAgICAgICBjb25zdCB5YiA9IHZpZXcuc2xpY2UobiArIDEsIG4gKyAxICsgbik7XG4gICAgICAgIHJldHVybiB7IHg6IHhiLCB5OiB5YiB9O1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlUG9pbnQocG9pbnQsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgICAgICBpZiAocG9pbnQueC5ieXRlTGVuZ3RoICE9PSBzaXplIHx8IHBvaW50LnkuYnl0ZUxlbmd0aCAhPT0gc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWCxZIGNvb3JkaW5hdGVzIGRvbid0IG1hdGNoIHBvaW50IHNpemUgY3JpdGVyaWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueCk7XG4gICAgICAgIGNvbnN0IHkgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LnkpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMiArIDEpO1xuICAgICAgICByZXNbMF0gPSA0O1xuICAgICAgICByZXMuc2V0KHgsIDEpO1xuICAgICAgICByZXMuc2V0KHksIHNpemUgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldFNpemUocG9pbnRTaXplKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCByID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucik7XG4gICAgICAgIGNvbnN0IHMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5zKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQociwgc2l6ZSkpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQocywgc2l6ZSksIHNpemUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjb2RlU2lnbmF0dXJlKGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IChzaXplICogMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzaXplIG9mIHRoZSBzaWduYXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHZpZXcuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHMgPSB2aWV3LnNsaWNlKHNpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogdGhpcy50cmltU3RhcnQociksXG4gICAgICAgICAgICBzOiB0aGlzLnRyaW1TdGFydChzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHRyaW1TdGFydChkYXRhKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKChpIDwgZGF0YS5sZW5ndGggLSAxKSAmJiAoZGF0YVtpXSA9PT0gMCkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoaSwgZGF0YS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkU3RhcnQoZGF0YSwgc2l6ZSkge1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICByZXMuc2V0KGRhdGEsIHNpemUgLSBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY0RzYVNpZ25hdHVyZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5zID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVdlYkNyeXB0b1NpZ25hdHVyZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwb2ludFNpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBFY1V0aWxzLmRlY29kZVNpZ25hdHVyZSh2YWx1ZSwgcG9pbnRTaXplICogOCk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IEVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnMpO1xuICAgICAgICByZXR1cm4gZWNTaWduYXR1cmU7XG4gICAgfVxuICAgIHRvV2ViQ3J5cHRvU2lnbmF0dXJlKHBvaW50U2l6ZSkge1xuICAgICAgICBwb2ludFNpemUgIT09IG51bGwgJiYgcG9pbnRTaXplICE9PSB2b2lkIDAgPyBwb2ludFNpemUgOiAocG9pbnRTaXplID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKSAqIDgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFY1V0aWxzLmVuY29kZVNpZ25hdHVyZSh0aGlzLCBwb2ludFNpemUpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlLmJ1ZmZlcjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwiclwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInNcIiwgdm9pZCAwKTtcblxuY2xhc3MgT25lQXN5bW1ldHJpY0tleSBleHRlbmRzIFByaXZhdGVLZXlJbmZvIHtcbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAxLCBpbXBsaWNpdDogdHJ1ZSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIE9uZUFzeW1tZXRyaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5sZXQgRWRQcml2YXRlS2V5ID0gY2xhc3MgRWRQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHtcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVkUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFByaXZhdGVLZXkpO1xuXG5sZXQgRWRQdWJsaWNLZXkgPSBjbGFzcyBFZFB1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJ4XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIng6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIEVkUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQdWJsaWNLZXkpO1xuXG5sZXQgQ3VydmVQcml2YXRlS2V5ID0gY2xhc3MgQ3VydmVQcml2YXRlS2V5IHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pLFxuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkucHJvdG90eXBlLCBcImRcIiwgdm9pZCAwKTtcbkN1cnZlUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkpO1xuXG5jb25zdCBpZFNlY3AyNTZyMSA9IFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiO1xuY29uc3QgaWRFbGxpcHRpY0N1cnZlID0gXCIxLjMuMTMyLjBcIjtcbmNvbnN0IGlkU2VjcDM4NHIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNGA7XG5jb25zdCBpZFNlY3A1MjFyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzVgO1xuY29uc3QgaWRTZWNwMjU2azEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjEwYDtcbmNvbnN0IGlkVmVyc2lvbk9uZSA9IFwiMS4zLjM2LjMuMy4yLjguMS4xXCI7XG5jb25zdCBpZEJyYWlucG9vbFAxNjByMSA9IGAke2lkVmVyc2lvbk9uZX0uMWA7XG5jb25zdCBpZEJyYWlucG9vbFAxNjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMmA7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uM2A7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uNGA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjRyMSA9IGAke2lkVmVyc2lvbk9uZX0uNWA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjR0MSA9IGAke2lkVmVyc2lvbk9uZX0uNmA7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZyMSA9IGAke2lkVmVyc2lvbk9uZX0uN2A7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZ0MSA9IGAke2lkVmVyc2lvbk9uZX0uOGA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjByMSA9IGAke2lkVmVyc2lvbk9uZX0uOWA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTBgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjExYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMmA7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTNgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEydDEgPSBgJHtpZFZlcnNpb25PbmV9LjE0YDtcbmNvbnN0IGlkWDI1NTE5ID0gXCIxLjMuMTAxLjExMFwiO1xuY29uc3QgaWRYNDQ4ID0gXCIxLjMuMTAxLjExMVwiO1xuY29uc3QgaWRFZDI1NTE5ID0gXCIxLjMuMTAxLjExMlwiO1xuY29uc3QgaWRFZDQ0OCA9IFwiMS4zLjEwMS4xMTNcIjtcblxudmFyIGluZGV4JDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWxnb3JpdGhtSWRlbnRpZmllcjogQWxnb3JpdGhtSWRlbnRpZmllcixcbiAgZ2V0IEN1cnZlUHJpdmF0ZUtleSAoKSB7IHJldHVybiBDdXJ2ZVByaXZhdGVLZXk7IH0sXG4gIEVjRHNhU2lnbmF0dXJlOiBFY0RzYVNpZ25hdHVyZSxcbiAgRWNQcml2YXRlS2V5OiBFY1ByaXZhdGVLZXksXG4gIGdldCBFY1B1YmxpY0tleSAoKSB7IHJldHVybiBFY1B1YmxpY0tleTsgfSxcbiAgZ2V0IEVkUHJpdmF0ZUtleSAoKSB7IHJldHVybiBFZFByaXZhdGVLZXk7IH0sXG4gIGdldCBFZFB1YmxpY0tleSAoKSB7IHJldHVybiBFZFB1YmxpY0tleTsgfSxcbiAgZ2V0IE9iamVjdElkZW50aWZpZXIgKCkgeyByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjsgfSxcbiAgT25lQXN5bW1ldHJpY0tleTogT25lQXN5bW1ldHJpY0tleSxcbiAgUHJpdmF0ZUtleUluZm86IFByaXZhdGVLZXlJbmZvLFxuICBQdWJsaWNLZXlJbmZvOiBQdWJsaWNLZXlJbmZvLFxuICBSc2FQcml2YXRlS2V5OiBSc2FQcml2YXRlS2V5LFxuICBSc2FQdWJsaWNLZXk6IFJzYVB1YmxpY0tleSxcbiAgY29udmVydGVyczogaW5kZXgkMixcbiAgaWRCcmFpbnBvb2xQMTYwcjE6IGlkQnJhaW5wb29sUDE2MHIxLFxuICBpZEJyYWlucG9vbFAxNjB0MTogaWRCcmFpbnBvb2xQMTYwdDEsXG4gIGlkQnJhaW5wb29sUDE5MnIxOiBpZEJyYWlucG9vbFAxOTJyMSxcbiAgaWRCcmFpbnBvb2xQMTkydDE6IGlkQnJhaW5wb29sUDE5MnQxLFxuICBpZEJyYWlucG9vbFAyMjRyMTogaWRCcmFpbnBvb2xQMjI0cjEsXG4gIGlkQnJhaW5wb29sUDIyNHQxOiBpZEJyYWlucG9vbFAyMjR0MSxcbiAgaWRCcmFpbnBvb2xQMjU2cjE6IGlkQnJhaW5wb29sUDI1NnIxLFxuICBpZEJyYWlucG9vbFAyNTZ0MTogaWRCcmFpbnBvb2xQMjU2dDEsXG4gIGlkQnJhaW5wb29sUDMyMHIxOiBpZEJyYWlucG9vbFAzMjByMSxcbiAgaWRCcmFpbnBvb2xQMzIwdDE6IGlkQnJhaW5wb29sUDMyMHQxLFxuICBpZEJyYWlucG9vbFAzODRyMTogaWRCcmFpbnBvb2xQMzg0cjEsXG4gIGlkQnJhaW5wb29sUDM4NHQxOiBpZEJyYWlucG9vbFAzODR0MSxcbiAgaWRCcmFpbnBvb2xQNTEycjE6IGlkQnJhaW5wb29sUDUxMnIxLFxuICBpZEJyYWlucG9vbFA1MTJ0MTogaWRCcmFpbnBvb2xQNTEydDEsXG4gIGlkRWQyNTUxOTogaWRFZDI1NTE5LFxuICBpZEVkNDQ4OiBpZEVkNDQ4LFxuICBpZEVsbGlwdGljQ3VydmU6IGlkRWxsaXB0aWNDdXJ2ZSxcbiAgaWRTZWNwMjU2azE6IGlkU2VjcDI1NmsxLFxuICBpZFNlY3AyNTZyMTogaWRTZWNwMjU2cjEsXG4gIGlkU2VjcDM4NHIxOiBpZFNlY3AzODRyMSxcbiAgaWRTZWNwNTIxcjE6IGlkU2VjcDUyMXIxLFxuICBpZFZlcnNpb25PbmU6IGlkVmVyc2lvbk9uZSxcbiAgaWRYMjU1MTk6IGlkWDI1NTE5LFxuICBpZFg0NDg6IGlkWDQ0OFxufSk7XG5cbmNsYXNzIEVjQ3VydmVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHN0YXRpYyByZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IG9pZCA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCk7XG4gICAgICAgIG9pZC52YWx1ZSA9IGl0ZW0uaWQ7XG4gICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKG9pZCk7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmaW5kKG5hbWVPcklkKSB7XG4gICAgICAgIG5hbWVPcklkID0gbmFtZU9ySWQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQgfHwgaXRlbS5pZC50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0KG5hbWVPcklkKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZmluZChuYW1lT3JJZCk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEVDIG5hbWVkIGN1cnZlICcke25hbWVPcklkfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkVjQ3VydmVzLml0ZW1zID0gW107XG5FY0N1cnZlcy5uYW1lcyA9IFtdO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMjU2XCIsIGlkOiBpZFNlY3AyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMzg0XCIsIGlkOiBpZFNlY3AzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtNTIxXCIsIGlkOiBpZFNlY3A1MjFyMSwgc2l6ZTogNTIxIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIkstMjU2XCIsIGlkOiBpZFNlY3AyNTZrMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwcjEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHQxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnIxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJyMSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTkydDEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHIxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHQxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjR0MSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnQxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjByMSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwdDEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzODR0MSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQNTEycjEsIHNpemU6IDUxMiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnQxLCBzaXplOiA1MTIgfSk7XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJITUFDXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBnZXREZWZhdWx0TGVuZ3RoKGFsZ05hbWUpIHtcbiAgICAgICAgc3dpdGNoIChhbGdOYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhbGdvcml0aG0gbmFtZSAnJHthbGdOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICBpZiAoXCJsZW5ndGhcIiBpbiBhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibGVuZ3RoOiBOdW1iZXIgaXMgb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUEJLREYyXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5zYWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5zYWx0KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdGVyYXRpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5pdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBsZXNzIHRoYW4gMVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhLREZcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLnNhbHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaW5mb1wiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLmluZm8pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IHsgbGVuZ3RoOiB0aGlzLmRlZmF1bHRMZW5ndGgsIC4uLmFyZ3NbMF0gfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFsZ29yaXRobS5sZW5ndGggfHwgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbmVnYXRpdmVcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTEyOFwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAxNjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTI1NlwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAzMjtcbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byB7XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9cIjtcbiAgICB9XG4gICAgcmFuZG9tVVVJRCgpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgICAgIGJbNl0gPSAoYls2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICAgICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgICAgICBjb25zdCB1dWlkID0gQ29udmVydC5Ub0hleChiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYCR7dXVpZC5zdWJzdHJpbmcoMCwgOCl9LSR7dXVpZC5zdWJzdHJpbmcoOCwgMTIpfS0ke3V1aWQuc3Vic3RyaW5nKDEyLCAxNil9LSR7dXVpZC5zdWJzdHJpbmcoMTYsIDIwKX0tJHt1dWlkLnN1YnN0cmluZygyMCl9YDtcbiAgICB9XG59XG5cbmNsYXNzIFByb3ZpZGVyU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXQocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtc1twcm92aWRlci5uYW1lLnRvTG93ZXJDYXNlKCldID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIHJlbW92ZUF0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldChhbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQobmFtZSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgYWxnb3JpdGhtcy5wdXNoKHByb3ZpZGVyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGdvcml0aG1zLnNvcnQoKTtcbiAgICB9XG59XG5cbmNsYXNzIFN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gbmV3IFByb3ZpZGVyU3RvcmFnZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNIYXNoZWRBbGdvcml0aG0oZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICYmIFwibmFtZVwiIGluIGRhdGFcbiAgICAgICAgICAgICYmIFwiaGFzaFwiIGluIGRhdGFcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJTdWJ0bGVDcnlwdG9cIjtcbiAgICB9XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZGlnZXN0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGlnZXN0KHByZXBhcmVkQWxnb3JpdGhtLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdlbmVyYXRlS2V5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcInNpZ25cIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuc2lnbih7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNCwgXCJ2ZXJpZnlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRTaWduYXR1cmUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnZlcmlmeSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWRTaWduYXR1cmUsIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImVuY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZWNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVyaXZlQml0c1wiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgbGVuZ3RoLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERlcml2ZWRLZXlUeXBlID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGRlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgaW1wb3J0UHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkRGVyaXZlZEtleVR5cGUubmFtZSk7XG4gICAgICAgIGltcG9ydFByb3ZpZGVyLmNoZWNrRGVyaXZlZEtleVBhcmFtcyhwcmVwYXJlZERlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBwcm92aWRlci5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgZGVyaXZlZEJpdHMgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUubGVuZ3RoIHx8IDUxMiwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KFwicmF3XCIsIGRlcml2ZWRCaXRzLCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZXhwb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXksIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihrZXkuYWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGltcG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImltcG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBpZiAoW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdLmluZGV4T2YoZm9ybWF0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmltcG9ydEtleShmb3JtYXQsIHByZXBhcmVkRGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFrZXlEYXRhLmt0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBJcyBub3QgSlNPTlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWREc2FQcm92aWRlciwgRWxsaXB0aWNQcm92aWRlciwgSGtkZlByb3ZpZGVyLCBIbWFjUHJvdmlkZXIsIEp3a1V0aWxzLCBPcGVyYXRpb25FcnJvciwgUGJrZGYyUHJvdmlkZXIsIFBlbUNvbnZlcnRlciwgUHJvdmlkZXJDcnlwdG8sIFByb3ZpZGVyU3RvcmFnZSwgUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBSc2FPYWVwUHJvdmlkZXIsIFJzYVByb3ZpZGVyLCBSc2FQc3NQcm92aWRlciwgUnNhU3NhUHJvdmlkZXIsIFNoYWtlMTI4UHJvdmlkZXIsIFNoYWtlMjU2UHJvdmlkZXIsIFNoYWtlUHJvdmlkZXIsIFN1YnRsZUNyeXB0bywgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3J5cHRvX19kZWZhdWx0IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyIH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSB7IG5hbWU6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMuYWxnID0gXCJcIjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZXh0XCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuQm9vbGVhbiwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiZXh0cmFjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrZXlfb3BzXCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCByZXBlYXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwidXNhZ2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImt0eVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiYWxnXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICB9XG59XG5cbmNsYXNzIEFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBBZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNUUmA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUdDTWA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9S1dgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DTUFDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q01BQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUVDQmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgQWVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEFlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBBZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlci5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGVuYyk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlci5mcm9tKFwiQTZBNkE2QTZBNkE2QTZBNlwiLCBcImhleFwiKTtcblxuY29uc3Qga2V5U3RvcmFnZSA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDcnlwdG9LZXkoa2V5KSB7XG4gICAgY29uc3QgcmVzID0ga2V5U3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIkNhbm5vdCBnZXQgQ3J5cHRvS2V5IGZyb20gc2VjdXJlIHN0b3JhZ2VcIik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzZXRDcnlwdG9LZXkodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBjb3JlLkNyeXB0b0tleS5jcmVhdGUodmFsdWUuYWxnb3JpdGhtLCB2YWx1ZS50eXBlLCB2YWx1ZS5leHRyYWN0YWJsZSwgdmFsdWUudXNhZ2VzKTtcbiAgICBPYmplY3QuZnJlZXplKGtleSk7XG4gICAga2V5U3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NiY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgemVybyA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIuYWxsb2MoYnVmZmVyLmxlbmd0aCk7XG4gICAgY29uc3QgbGFzdCA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7XG4gICAgICAgIHNoaWZ0ZWRbaW5kZXhdID0gYnVmZmVyW2luZGV4XSA8PCAxO1xuICAgICAgICBpZiAoYnVmZmVyW2luZGV4ICsgMV0gJiAweDgwKSB7XG4gICAgICAgICAgICBzaGlmdGVkW2luZGV4XSArPSAweDAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNoaWZ0ZWRbbGFzdF0gPSBidWZmZXJbbGFzdF0gPDwgMTtcbiAgICByZXR1cm4gc2hpZnRlZDtcbn1cbmZ1bmN0aW9uIHhvcihhLCBiKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlci5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBtZXNzYWdlLmxlbmd0aDtcbiAgICBibG9jay5maWxsKDApO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgYmxvY2tbZW5kIC0gc3RhcnRdID0gMHg4MDtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVN1YmtleXMoa2V5KSB7XG4gICAgY29uc3QgbCA9IGFlcyhrZXksIHplcm8pO1xuICAgIGxldCBzdWJrZXkxID0gYml0U2hpZnRMZWZ0KGwpO1xuICAgIGlmIChsWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkxID0geG9yKHN1YmtleTEsIHJiKTtcbiAgICB9XG4gICAgbGV0IHN1YmtleTIgPSBiaXRTaGlmdExlZnQoc3Via2V5MSk7XG4gICAgaWYgKHN1YmtleTFbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTIgPSB4b3Ioc3Via2V5MiwgcmIpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJrZXkxLCBzdWJrZXkyIH07XG59XG5mdW5jdGlvbiBhZXNDbWFjKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IHN1YmtleXMgPSBnZW5lcmF0ZVN1YmtleXMoa2V5KTtcbiAgICBsZXQgYmxvY2tDb3VudCA9IE1hdGguY2VpbChtZXNzYWdlLmxlbmd0aCAvIGJsb2NrU2l6ZSk7XG4gICAgbGV0IGxhc3RCbG9ja0NvbXBsZXRlRmxhZztcbiAgICBsZXQgbGFzdEJsb2NrO1xuICAgIGlmIChibG9ja0NvdW50ID09PSAwKSB7XG4gICAgICAgIGJsb2NrQ291bnQgPSAxO1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IChtZXNzYWdlLmxlbmd0aCAlIGJsb2NrU2l6ZSA9PT0gMCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gYmxvY2tDb3VudCAtIDE7XG4gICAgaWYgKGxhc3RCbG9ja0NvbXBsZXRlRmxhZykge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTIpO1xuICAgIH1cbiAgICBsZXQgeCA9IHplcm87XG4gICAgbGV0IHk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3RCbG9ja0luZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHkgPSB4b3IoeCwgZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGluZGV4KSk7XG4gICAgICAgIHggPSBhZXMoa2V5LCB5KTtcbiAgICB9XG4gICAgeSA9IHhvcihsYXN0QmxvY2ssIHgpO1xuICAgIHJldHVybiBhZXMoa2V5LCB5KTtcbn1cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ21hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWVzQ21hYyhnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIuZnJvbShzaWduYXR1cmUyKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0N0clByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0djbVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzS3dQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNFY2JQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBERVMtQ0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDNERVMtQ0JDYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBEZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgRGVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvX19kZWZhdWx0LnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogRGVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhbGdvcml0aG0ucHVibGljRXhwb25lbnQpLFxuICAgICAgICBdKS5yZWFkSW50MzJCRSgwKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwicnNhXCIsIHtcbiAgICAgICAgICAgIG1vZHVsdXNMZW5ndGg6IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoLFxuICAgICAgICAgICAgcHVibGljRXhwb25lbnQsXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB2ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG9fX2RlZmF1bHQucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0b19fZGVmYXVsdC5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvX19kZWZhdWx0LnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0b19fZGVmYXVsdC5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoICE9PSBrZXlTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGtjczAgPSBjcnlwdG9fX2RlZmF1bHQucHJpdmF0ZURlY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTFcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGE1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwiZWNcIiwge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSksXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGVjU2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBlY1NpZ25hdHVyZVJhdyk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShiYXNlS2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3QgZWNkaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVFQ0RIKGNyeXB0b0FsZyk7XG4gICAgICAgIGNvbnN0IGFzblByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYmFzZUtleS5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBhc25FY1ByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYXNuUHJpdmF0ZUtleS5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KEJ1ZmZlci5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKG5hbWVkQ3VydmUpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBhc25LZXkudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG9fX2RlZmF1bHQuc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG9fX2RlZmF1bHQudmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYWxnb3JpdGhtLnB1YmxpYy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBiYXNlS2V5LmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvX19kZWZhdWx0LmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgZ2V0IHJlcXVpcmVkICd4JyBmaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleUluZm8ucHVibGljS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleS5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleSksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuRWRDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWRDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZERzYVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUucmVwbGFjZSgvXmVkL2ksIFwiRWRcIiksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoRXNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWRDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG9fX2RlZmF1bHQucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIuZnJvbShzYWx0KSwgYWxnb3JpdGhtLml0ZXJhdGlvbnMsIGxlbmd0aCA+PiAzLCBoYXNoLCAoZXJyLCBkZXJpdmVkQml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRlcml2ZWRCaXRzKS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyYXdcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IFBia2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBobWFjLmNvbXBhcmUoQnVmZmVyLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhwYXJhbXMsIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gcGFyYW1zLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaGFzaExlbmd0aCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2gpLmRpZ2VzdCgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGxlbmd0aCAvIDg7XG4gICAgICAgIGNvbnN0IGluZm8gPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLmluZm8pO1xuICAgICAgICBjb25zdCBQUksgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhoYXNoLCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLnNhbHQpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBbQnVmZmVyLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyLmZyb20oW2ldKV0pKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheS5idWZmZXIsIGFycmF5LmJ5dGVPZmZzZXQsIGFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgICBjcnlwdG9fX2RlZmF1bHQucmFuZG9tRmlsbFN5bmMoYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQ3J5cHRvIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbi8qKlxuICogUHJvcGVydHktS2V5c1xuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqL1xuXG5leHBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTdGF0ZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3N0YXRlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnN0YW5jZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2luc3RhbmNlXCIpO1xuIiwgImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwgImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCAiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsICJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsICJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQmFzZSB9O1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZnJvbSB3aGljaCB0aGUgbW9zdCBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIGJlc2lkZXMgYSBgdG9TdHJpbmdgIHdoaWNoIHJldHVybnMgdGhlIGpzb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuICogYWxzbyBhIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuXG4gKlxuICogVGhlcmVmb3IgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBtZXRob2QgYCBbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KWAgd2hpY2ggcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3RcbiAqIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBAc2VlIFtodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2VdKGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2UpXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgd2hpY2ggcmV0dXJucyBhIHVuaXF1ZSBzeW1ib2wuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICogICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2xhc3Mgd2FzIGZvcm1lcmx5IGNhbGxlZCBPYmplY3QuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBCYXNlIGV4dGVuZHMgT2JqZWN0IHtcblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gdGhhdFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdCkge1xuXHRcdGlmIChcblx0XHRcdHRoYXQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdCA9PT0gbnVsbCB8fFxuXHRcdFx0KHR5cGVvZiB0aGF0ICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0ICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhhdENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoYXQpO1xuXHRcdGlmIChcblx0XHRcdHRoYXRDbGFzcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHR0aGF0Q2xhc3MgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdENsYXNzICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0Q2xhc3MgIT09IFwiZnVuY3Rpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbdGhhdENsYXNzXSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHRoaXMgY2FsbCB0aGUgc3RhdGljIG1ldGhvZCBvZiB0aGUgc3VwZXIgY2xhc3MsIGlmIHRoZXJlIGlzIG9uZVxuXHRcdHJldHVybiBzdXBlcltTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpO1xuXHR9XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBnZXR0ZXIgYGluc3RhbmNlU3ltYm9sYCBhbmQgaWYgdGhlIHZhbHVlIG9mIHRoaXMgZ2V0dGVyIGlzIGVxdWFsIHRvIHRoZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxhbnl8Ym9vbGVhbn1cbiAqIEBzaW5jZSAyLjEuMFxuICovXG5mdW5jdGlvbiBjaGVja0luc3RhbmNlU3ltYm9sKG9iaikge1xuXHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG8gPSBvYmo/LmNvbnN0cnVjdG9yO1xuXHRpZiAoXG5cdFx0cHJvdG8gPT09IHVuZGVmaW5lZCB8fFxuXHRcdHByb3RvID09PSBudWxsIHx8XG5cdFx0KHR5cGVvZiBwcm90byAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcHJvdG8gIT09IFwiZnVuY3Rpb25cIilcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb3RvLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG5cdH1cblxuXHRjb25zdCBzeW1ib2wgPSBwcm90b1tpbnN0YW5jZVN5bWJvbF07XG5cdGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvYmouX19wcm90b19fKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmouX19wcm90b19fKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzeW1ib2wgPT09IHRoaXNbaW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdGFjayB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLlF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgU3RhY2sgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0cHVzaCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayBhbmQgcmV0dXJuc1xuXHQgKiB0aGF0IG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gaXMgdGhlIHN0YWNrIGVtcHR5XG5cdCAqIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cG9wKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5wb3AoKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQYXRoZmluZGVyLCBERUxJTUlURVIsIFdJTERDQVJEIH07XG5cbi8qKlxuICogcGF0aCBzZXBhcmF0b3JcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCIuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5cbi8qKlxuICogUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBwYXRoZmluZGVyLCB2YWx1ZXMgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gZnJvbSBhbiBvYmplY3QgY29uc3RydWN0LlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe1xuICogYToge1xuICogICAgIGI6IHtcbiAqICAgICAgICAgZjogW1xuICogICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICogICAgICAgICAgICAgfVxuICogICAgICAgICBdLFxuICogICAgIH1cbiAqIH1cbiAqIH0pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50IG9yIGhhcyB0aGUgd3JvbmcgdHlwZSwgYSBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgRXJyb3JcbiAqIGBgYFxuICpcbiAqIFRoZSBgUGF0aGZpbmRlci5leGlzdHMoKWAgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYWNjZXNzIHRvIHRoZSBwYXRoIGlzIHBvc3NpYmxlLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmV4aXN0cyhcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBwYXRoZmluZGVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgb2JqZWN0IHN0cnVjdHVyZXMuIHRvIGRvIHRoaXMsIHRoZSBgUGF0aGZpbmRlci5zZXRWaWEoKWAgbWV0aG9kIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIG9iaiA9IHt9O1xuICogbmV3IFBhdGhmaW5kZXIob2JqKS5zZXRWaWEoJ2EuYi4wLmMnLCB0cnVlKTsgLy8gXHUyMUE2IHthOntiOlt7Yzp0cnVlfV19fVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0xLm1qc1xuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0yLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFBhdGhmaW5kZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHBhcmFtZXRlciBpcyBhIHNpbXBsZSB0eXBlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmplY3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGEgc2ltcGxlIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IFdJTERDQVJEO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB3aWxkY2FyZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lsZGNhcmRcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzZXRXaWxkQ2FyZCh3aWxkY2FyZCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHdpbGRjYXJkKTtcblx0XHR0aGlzLndpbGRDYXJkID0gd2lsZGNhcmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGdldFZpYShwYXRoKSB7XG5cdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS42LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGRlbGV0ZVZpYShwYXRoKSB7XG5cdFx0ZGVsZXRlVmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge2Jvb2x9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKi9cblx0ZXhpc3RzKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHRydWUpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0cGF0aCA9IHBhdGguam9pbihERUxJTUlURVIpO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0KSkge1xuXHRcdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHZhbHVlLCBwYXRoLCBjaGVjaykpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBrZXkgPSBwYXRoLnNwbGl0KERFTElNSVRFUikuc2hpZnQoKTtcblx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgcGF0aCwgY2hlY2spKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIFtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSBbYm9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm5zIHsqfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc1N0cmluZyhwYXRoKSkge1xuXHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblxuXHRpZiAoY3VycmVudCA9PT0gdGhpcy53aWxkQ2FyZCkge1xuXHRcdHJldHVybiBpdGVyYXRlLmNhbGwodGhpcywgc3ViamVjdCwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGxldCBhbmNob3I7XG5cdFx0aWYgKHN1YmplY3QgaW5zdGFuY2VvZiBNYXAgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3QuZ2V0KGN1cnJlbnQpO1xuXHRcdH0gZWxzZSBpZiAoc3ViamVjdCBpbnN0YW5jZW9mIFNldCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gWy4uLnN1YmplY3RdPy5bY3VycmVudF07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcIik7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9XG5cblx0XHRpZiAoaXNPYmplY3QoYW5jaG9yKSB8fCBpc0FycmF5KGFuY2hvcikpIHtcblx0XHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBhbmNob3IsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHRcdH1cblxuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmQgKCR7cGFydHMuam9pbihERUxJTUlURVIpfSlgKTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2sgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCksXG5cdFx0XHRcdGN1cnJlbnQsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoY3VycmVudCkgJiYgZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFwidW5rbm93biB2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5jaG9yO1xuXHR9XG5cblx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHN1YmplY3R9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBlcnJvcjogcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5XCIpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3VicGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXHRsZXQgY3VycmVudCA9IHN1YnBhdGg7XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHN0YWNrLnB1c2goY3VycmVudCk7XG5cdFx0cGFydHMucG9wKCk7XG5cdFx0Y3VycmVudCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRcdGlmIChjdXJyZW50ID09PSBcIlwiKSBicmVhaztcblx0fVxuXG5cdHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0Y3VycmVudCA9IHN0YWNrLnBvcCgpO1xuXHRcdGxldCBvYmogPSB7fTtcblxuXHRcdGlmICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0XHRjb25zdCBuID0gc3RhY2sucGVlaygpLnNwbGl0KERFTElNSVRFUikucG9wKCk7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKHBhcnNlSW50KG4pKSkge1xuXHRcdFx0XHRvYmogPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCBvYmopO1xuXHR9XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3VicGF0aCk7XG5cblx0aWYgKCEoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkpIHtcblx0XHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZW9mIHN1YmplY3R9YCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gYXNzaWduUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdGlmICghb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRvYmplY3Rba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHR9XG5cblx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVsZXRlVmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YnBhdGgpO1xuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRhbmNob3IuZGVsZXRlKGxhc3QpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXAgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0IHx8XG5cdFx0KHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZilcblx0KSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0l0ZXJhYmxlLCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5cbmV4cG9ydCB7IFRva2VuTGlzdCB9O1xuXG4vKipcbiAqIEEgYFRva2VuTGlzdGAgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdG9rZW5zIChpbmRpdmlkdWFsIGNoYXJhY3RlciBzdHJpbmdzIHN1Y2ggYXMgY3NzIGNsYXNzZXMgaW4gYW4gYXR0cmlidXRlIHN0cmluZykuXG4gKlxuICogVGhlIGBUb2tlbkxpc3RgIG9mZmVycyB2YXJpb3VzIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHZhbHVlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWRkLCByZW1vdmUgb3IgcmVwbGFjZSBhIGNsYXNzIGluIGEgQ1NTIGxpc3QuXG4gKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBbaXRlcmF0aW9uIHByb3RvY29sXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzKS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTEubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIFRva2VuTGlzdCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gaW5pdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5pdCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cblx0XHRpZiAodHlwZW9mIGluaXQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMuYWRkKGluaXQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJdGVyYXRvciBwcm90b2NvbFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7U3ltYm9sLml0ZXJhdG9yfVxuXHQgKi9cblx0Z2V0SXRlcmF0b3IoKSB7XG5cdFx0cmV0dXJuIHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt7bmV4dDogKChmdW5jdGlvbigpOiAoe3ZhbHVlOiAqLCBkb25lOiBib29sZWFufSkpfCopfX1cblx0ICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdC8vIFVzZSBhIG5ldyBpbmRleCBmb3IgZWFjaCBpdGVyYXRvci4gVGhpcyBtYWtlcyBtdWx0aXBsZVxuXHRcdC8vIGl0ZXJhdGlvbnMgb3ZlciB0aGUgaXRlcmFibGUgc2FmZSBmb3Igbm9uLXRyaXZpYWwgY2FzZXMsXG5cdFx0Ly8gc3VjaCBhcyB1c2Ugb2YgYnJlYWsgb3IgbmVzdGVkIGxvb3Bpbmcgb3ZlciB0aGUgc2FtZSBpdGVyYWJsZS5cblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IGVudHJpZXM/LltpbmRleCsrXSwgZG9uZTogZmFsc2UgfTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4geyBkb25lOiB0cnVlIH07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgY29udGFpbnMgdG9rZW4sIG90aGVyd2lzZSBmYWxzZVxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTIubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnModmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdG9rZW5zXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMy5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMudG9rZW5zLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0b2tlblxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTQubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHJlbW92ZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXBsYWNlcyBhIHRva2VuIHdpdGggYSBuZXcgdG9rZW4uXG5cdCAqXG5cdCAqIGlmIHRoZSBwYXNzZWQgdG9rZW4gZXhpc3RzLCBpdCBpcyByZXBsYWNlZCB3aXRoIG5ld1Rva2VuIGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqIGlmIHRoZSB0b2tlbiBkb2VzIG5vdCBleGlzdCwgbmV3VG9rZW4gaXMgbm90IHNldCBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1Rva2VuXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRyZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuZXdUb2tlbik7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHRcdGNvbnN0IGkgPSBhLmluZGV4T2YodG9rZW4pO1xuXHRcdGlmIChpID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRhLnNwbGljZShpLCAxLCBuZXdUb2tlbik7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5hZGQoYSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuIGZyb20gc3RyaW5nLiBJZiB0b2tlbiBkb2Vzbid0IGV4aXN0IGl0J3MgYWRkZWQuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNS5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHRvZ2dsZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dG9nZ2xlVmFsdWUuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybnMge2FycmF5fVxuXHQgKi9cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdH1cblxuXHQvKipcblx0ICogZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpdGggZWFjaCB2YWx1ZSBvZiB0aGUgc2V0XG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpcy50b2tlbnMuZm9yRWFjaChjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgaW5kaXZpZHVhbCB0b2tlbnMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgY2hhcmFjdGVyXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzKCkuam9pbihcIiBcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHRva2VuXG4gKiBAcmV0dXJucyB7dG9nZ2xlVmFsdWV9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZSh0b2tlbikge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9rZW5MaXN0KSlcblx0XHR0aHJvdyBFcnJvcihcIm11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcIik7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dG9rZW4gPSB0b2tlbi50cmltKCk7XG5cdGlmICh0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdHRoaXMucmVtb3ZlKHRva2VuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0aGlzLmFkZCh0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHtcblx0REVGQVVMVF9USEVNRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX09QVElPTlMsXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfVEhFTUVfUFJFRklYLFxuXHRBVFRSSUJVVEVfVEhFTUVfTkFNRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5ELFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUsXG5cdEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9WQUxVRSxcblx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFRBR19TQ1JJUFQsXG5cdFRBR19TVFlMRSxcblx0VEFHX0xJTkssXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfVFJBTlNMQVRFLFxuXHRBVFRSSUJVVEVfVEFCSU5ERVgsXG5cdEFUVFJJQlVURV9TUEVMTENIRUNLLFxuXHRBVFRSSUJVVEVfU0xPVCxcblx0QVRUUklCVVRFX1BBUlQsXG5cdEFUVFJJQlVURV9MQU5HLFxuXHRBVFRSSUJVVEVfSVRFTVRZUEUsXG5cdEFUVFJJQlVURV9JVEVNU0NPUEUsXG5cdEFUVFJJQlVURV9JVEVNUkVGLFxuXHRBVFRSSUJVVEVfSVRFTUlELFxuXHRBVFRSSUJVVEVfSVRFTVBST1AsXG5cdEFUVFJJQlVURV9JUyxcblx0QVRUUklCVVRFX0lOUFVUTU9ERSxcblx0QVRUUklCVVRFX0FDQ0VTU0tFWSxcblx0QVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFLFxuXHRBVFRSSUJVVEVfQVVUT0ZPQ1VTLFxuXHRBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFLFxuXHRBVFRSSUJVVEVfRElSLFxuXHRBVFRSSUJVVEVfRFJBR0dBQkxFLFxuXHRBVFRSSUJVVEVfRU5URVJLRVlISU5ULFxuXHRBVFRSSUJVVEVfRVhQT1JUUEFSVFMsXG5cdEFUVFJJQlVURV9ISURERU4sXG5cdG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxufTtcblxuLyoqXG4gKiBkZWZhdWx0IHRoZW1lXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfVEhFTUUgPSBcIm1vbnN0ZXJcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9uc2A7XG5cbi8qKlxuICogVGhpcyBpcyBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgc2NyaXB0IGhvc3QgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TQ1JJUFRfSE9TVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2NyaXB0LWhvc3RgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIG9wdGlvbnMgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTklUX0NBTExCQUNLID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbml0LWNhbGxiYWNrYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgaW5pdENvbnRyb2xDYWxsYmFja05hbWUgPSBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2A7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9OQU1FID0gYCR7QVRUUklCVVRFX1RIRU1FX1BSRUZJWH1uYW1lYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hdHRyaWJ1dGVzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXBsYWNlYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluc2VydGA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVNT1ZFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJpbmRgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9VUERBVEVSX0JJTkR9LXR5cGVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10ZW1wbGF0ZS1wcmVmaXhgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUk9MRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cm9sZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFID0gXCJ2YWx1ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PQkpFQ1RMSU5LID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vYmplY3RsaW5rYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBvYmplY3RVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TVFlMRSA9IFwic3R5bGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX0xJTksgPSBcImxpbmtcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0NMQVNTID0gXCJjbGFzc1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVElUTEUgPSBcInRpdGxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hSRUYgPSBcImhyZWZcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RZUEUgPSBcInR5cGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFJBTlNMQVRFID0gXCJ0cmFuc2xhdGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RBQklOREVYID0gXCJ0YWJpbmRleFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU0xPVCA9IFwic2xvdFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUEFSVCA9IFwicGFydFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVRZUEUgPSBcIml0ZW10eXBlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNU0NPUEUgPSBcIml0ZW1zY29wZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTUlEID0gXCJpdGVtaWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1QUk9QID0gXCJpdGVtcHJvcFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlBVVE1PREUgPSBcImlucHV0bW9kZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQUNDRVNTS0VZID0gXCJhY2Nlc3NrZXlcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0ZPQ1VTID0gXCJhdXRvZm9jdXNcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSA9IFwiY29udGVudGVkaXRhYmxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRFJBR0dBQkxFID0gXCJkcmFnZ2FibGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VOVEVSS0VZSElOVCA9IFwiZW50ZXJrZXloaW50XCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSElEREVOID0gXCJoaWRkZW5cIjtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVTeW1ib2wsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1xuXHRmaW5kQ2xvc2VzdE9iamVjdExpbmssXG5cdGFkZFRvT2JqZWN0TGluayxcblx0cmVtb3ZlT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0dG9nZ2xlQXR0cmlidXRlVG9rZW4sXG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcblx0Y29udGFpbnNBdHRyaWJ1dGVUb2tlbixcblx0cmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuXHRjbGVhckF0dHJpYnV0ZVRva2Vucyxcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0ZmluZENsb3Nlc3RCeUNsYXNzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNsb3Nlc3Qgb2JqZWN0IGxpbmsgb2YgYSBub2RlXG4gKlxuICogaWYgYSBub2RlIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgb2JqZWN0IGxpbmssIGEgcmVjdXJzaXZlIHNlYXJjaCB1cHdhcmRzIGlzIHBlcmZvcm1lZCB1bnRpbCB0aGUgY29ycmVzcG9uZGluZ1xuICogb2JqZWN0IGxpbmsgaXMgZm91bmQsIG9yIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gc3ltYm9sXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZWxlbWVudFtzeW1ib2xdID0gbmV3IFNldCgpO1xuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZWxlbWVudFtzeW1ib2xdLmFkZChvYmplY3QpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGVsZW1lbnRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihcblx0XHRlbGVtZW50LFxuXHRcdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRcdHN5bWJvbC50b1N0cmluZygpLFxuXHQpO1xufVxuXG4vKipcbiAqIFRoZSBPYmplY3RMaW5rIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBvYmplY3RzIHRvIEhUTUxFbGVtZW50cy4gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgc2V0IHVuZGVyIGEgdW5pcXVlXG4gKiBzeW1ib2wgYW5kIGNhbiBiZSByZWFkIHZpYSBhbiBpdGVyYXRvciB7QHNlZSB7QGxpbmsgZ2V0TGlua2VkT2JqZWN0c319LlxuICpcbiAqIEluIGFkZGl0aW9uLCBlbGVtZW50cyB3aXRoIGFuIG9iamVjdExpbmsgcmVjZWl2ZSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb2JqZWN0bGlua2AuXG4gKlxuICogV2l0aCB0aGUgbWV0aG9kICB7QHNlZSB7QGxpbmsgYWRkVG9PYmplY3RMaW5rfX0gdGhlIG9iamVjdHMgY2FuIGJlIGFkZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtJdGVyYXRvcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3Igc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3IgJHtzeW1ib2wudG9TdHJpbmcoKX1gKTtcblx0fVxuXG5cdHJldHVybiBlbGVtZW50Py5bc3ltYm9sXVtTeW1ib2wuaXRlcmF0b3JdKCk7XG59XG5cbi8qKlxuICogV2l0aCB0aGlzIG1ldGhvZCB0b2tlbnMgaW4gYW4gYXR0cmlidXRlIGNhbiBiZSBzd2l0Y2hlZCBvbiBvciBvZmYuIEZvciBleGFtcGxlLCBjbGFzc2VzIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIGluIHRoZSBlbGVtZW50cyBjbGFzcyBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5hZGQodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZW1vdmUgdG9rZW5zIGZyb20gYW4gYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZW1vdmUodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYXR0cmlidXRlIGhhcyBhIHRva2VuLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGZyb21cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIGZyb20sIHRvKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhmcm9tKTtcblx0dmFsaWRhdGVTdHJpbmcodG8pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVwbGFjZShmcm9tLCB0bykudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGtleSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIik7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBkYXRhLW15LWF0dHJpYnV0ZT1cIjJcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqXG4gKiAvLyBpZiBhIHZhbHVlIGlzIHNwZWNpZmllZCwgZm9yIGV4YW1wbGUgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBuYW1lIGFuZCB0aGUgdmFsdWUgYXJlIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJycpOyAgLy8gXHUyMUE2IHVuZGVmaW5lZFxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcyJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY2xhc3M9XCJteWNsYXNzXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRDbG9zZXN0QnlDbGFzc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzJztcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcygpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucyh2YWxpZGF0ZVN0cmluZyhjbGFzc05hbWUpKSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGAuJHtjbGFzc05hbWV9YCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQge1xuXHRnZXREb2N1bWVudCxcblx0Z2V0V2luZG93LFxuXHRnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyxcblx0ZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzLFxuXHRnZXRDb250YWluaW5nRG9jdW1lbnQsXG5cdGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cyxcblx0ZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsKCk/LltcImRvY3VtZW50XCJdO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIGdldEdsb2JhbCgpWyd3aW5kb3cnXT13aW5kb3c7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRHbG9iYWwoKT8uW1wid2luZG93XCJdO1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gd2luZG93O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKGh0bWwpIHtcblx0dmFsaWRhdGVTdHJpbmcoaHRtbCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcblx0dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcblxuXHRyZXR1cm4gdGVtcGxhdGUuY29udGVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBJRCwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHNpbmNlIDMuMjkuMFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudCwgdGFyZ2V0SWQpIHtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyB0aGUgdGFyZ2V0IElEXG5cdGlmIChlbGVtZW50LmlkID09PSB0YXJnZXRJZCkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgc2VhcmNoIHdpdGhpbiB0aGUgbWFpbiBkb2N1bWVudFxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhyb290Tm9kZS5ob3N0LCB0YXJnZXRJZCk7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCB0YXJnZXRJZCk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqIHdpdGggYSBzcGVjaWZpZWQgc2VsZWN0b3IsIGNvbnNpZGVyaW5nIGJvdGggbm9ybWFsIERPTSBhbmQgc2hhZG93IERPTS5cbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgZmluZGluZyBhIHBhcmVudCBlbGVtZW50IHdpdGggYSBzcGVjaWZpYyBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fFNoYWRvd1Jvb3R9IGVsZW1lbnQgLSBUaGUgc3RhcnRpbmcgZWxlbWVudCBvciBzaGFkb3cgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzaW5jZSAzLjU1LjBcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG5cdGlmICghZWxlbWVudCB8fCAhc2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFNlYXJjaCB3aXRoaW4gdGhlIGN1cnJlbnQgZWxlbWVudCdzIHNoYWRvdyByb290LCBpZiBpdCBleGlzdHNcblx0aWYgKGVsZW1lbnQuc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgaW5zaWRlIGEgc2hhZG93IHJvb3QsIHNlYXJjaCBpdHMgaG9zdCdzIGFuY2VzdG9yc1xuXHRjb25zdCByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcblx0aWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMocm9vdE5vZGUuaG9zdCwgc2VsZWN0b3IpO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhlIGN1cnJlbnQgZWxlbWVudCdzIHBhcmVudFxuXHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgc2VsZWN0b3IpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH1cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB7XG5cdGxldCBjdXJyZW50Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblx0bGV0IGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cblx0d2hpbGUgKFxuXHRcdGN1cnJlbnRQYXJlbnQgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX05PREUgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnRSb290ICYmIGN1cnJlbnRSb290LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBjdXJyZW50UGFyZW50LnNoYWRvd1Jvb3Q7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50UGFyZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGN1cnJlbnRSb290ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREVcblx0XHQpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5ob3N0O1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gbnVsbDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudFBhcmVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHsqfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc2luY2UgMy4zNi4wXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KSB7XG5cdGlmIChcblx0XHQhZWxlbWVudCB8fFxuXHRcdCEoXG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnRcblx0XHQpXG5cdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdHJldHVybiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHx8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqIEBzaW5jZSA0LjAuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cygpIHtcblx0Y29uc3QgY3VzdG9tRWxlbWVudFRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKVxuXHRcdC5tYXAoKHRhZykgPT4gdGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcblx0XHQuZmlsdGVyKCh0YWdOYW1lKSA9PiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNsb25lIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uLCBvYmplY3RzIGNhbiBiZSBjbG9uZWQuXG4gKiBUaGUgZW50aXJlIG9iamVjdCB0cmVlIGlzIHJ1biB0aHJvdWdoLlxuICpcbiAqIFByb3h5LCBFbGVtZW50LCBIVE1MRG9jdW1lbnQgYW5kIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VzIGFyZSBub3QgY2xvbmVkLlxuICogR2xvYmFsIG9iamVjdHMgc3VjaCBhcyB3aW5kb3dzIGFyZSBhbHNvIG5vdCBjbG9uZWQsXG4gKlxuICogSWYgYW4gb2JqZWN0IGhhcyBhIG1ldGhvZCBgZ2V0Q2xvbmUoKWAsIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcmV0dXJucyB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsb25lT2JqZWN0KG9iaikge1xuXHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXG5cdGNvbnN0IGZrdCA9IG9iaj8uW1wiY29uc3RydWN0b3JcIl07XG5cblx0LyoqIE9iamVjdCBoYXMgY2xvbmUgbWV0aG9kICovXG5cdGlmICh0eXBlT2YoZmt0KSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgcHJvdG90eXBlID0gZmt0Py5wcm90b3R5cGU7XG5cdFx0aWYgKHR5cGVvZiBwcm90b3R5cGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiZ2V0Q2xvbmVcIikgJiZcblx0XHRcdFx0dHlwZU9mKG9iai5nZXRDbG9uZSkgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvYmouZ2V0Q2xvbmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgY29weSA9IHt9O1xuXHRpZiAoXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5jYWxsID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0Y29weSA9IG5ldyBvYmouY29uc3RydWN0b3IoKTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuXHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmpba2V5XSkpIHtcblx0XHRcdGNvcHlba2V5XSA9IG9ialtrZXldO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29weVtrZXldID0gY2xvbmUob2JqW2tleV0pO1xuXHR9XG5cblx0cmV0dXJuIGNvcHk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vbG9jYWxlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgbG9jYWxlU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBsYW5ndWFnZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5sYW5ndWFnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHJlZ2lvbigpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5yZWdpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBzY3JpcHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uc2NyaXB0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgdmFyaWFudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0udmFyaWFudHM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBleHRsYW5nKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmV4dGxhbmc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBwcml2YXRlVXNlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnByaXZhdGVWYWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5sb2NhbGVTdHJpbmd9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nOiBsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGVNYXB9XG5cdCAqL1xuXHRnZXRNYXAoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbcHJvcGVydGllc1N5bWJvbF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYWxlTWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFuZ3VhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY3JpcHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWdpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YXJpYW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dGxhbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlVXNlXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBsb2NhbCBhY2NvcmRpbmcgdG8gcmZjNDY0NiBzdGFuZGFyZFxuICpcbiAqIExpbWl0YXRpb25zOiBUaGUgcmVnZXggY2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2YXJpYW50cyBvciBwcml2YXRlLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQge2NyZWF0ZUxvY2FsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvaTE4bi9sb2NhbGUubWpzJztcbiAqIGNyZWF0ZUxvY2FsZSgpXG4gKiBgYGBcbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqICAgVGhlIHN5bnRheCBvZiB0aGUgbGFuZ3VhZ2UgdGFnIGluIEFCTkYgW1JGQzQyMzRdIGlzOlxuICpcbiAqICAgTGFuZ3VhZ2UtVGFnICA9IGxhbmd0YWdcbiAqICAgICAgICAgICAgICAgICAvIHByaXZhdGV1c2UgICAgICAgICAgICAgOyBwcml2YXRlIHVzZSB0YWdcbiAqICAgICAgICAgICAgICAgICAvIGdyYW5kZmF0aGVyZWQgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvbnNcbiAqXG4gKiAgIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiAgIGxhbmd1YWdlICAgICAgPSAoMiozQUxQSEEgWyBleHRsYW5nIF0pIDsgc2hvcnRlc3QgSVNPIDYzOSBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyA0QUxQSEEgICAgICAgICAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqICAgICAgICAgICAgICAgICAvIDUqOEFMUEhBICAgICAgICAgICAgICAgOyByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZ1xuICpcbiAqICAgZXh0bGFuZyAgICAgICA9ICozKFwiLVwiIDNBTFBIQSkgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKlxuICogICBzY3JpcHQgICAgICAgID0gNEFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAxNTkyNCBjb2RlXG4gKlxuICogICByZWdpb24gICAgICAgID0gMkFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAzMTY2IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDNESUdJVCAgICAgICAgICAgICAgICAgOyBVTiBNLjQ5IGNvZGVcbiAqXG4gKiAgIHZhcmlhbnQgICAgICAgPSA1KjhhbHBoYW51bSAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCB2YXJpYW50c1xuICogICAgICAgICAgICAgICAgIC8gKERJR0lUIDNhbHBoYW51bSlcbiAqXG4gKiAgIGV4dGVuc2lvbiAgICAgPSBzaW5nbGV0b24gMSooXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqXG4gKiAgIHNpbmdsZXRvbiAgICAgPSAleDQxLTU3IC8gJXg1OS01QSAvICV4NjEtNzcgLyAleDc5LTdBIC8gRElHSVRcbiAqICAgICAgICAgICAgICAgICA7IFwiYVwiLVwid1wiIC8gXCJ5XCItXCJ6XCIgLyBcIkFcIi1cIldcIiAvIFwiWVwiLVwiWlwiIC8gXCIwXCItXCI5XCJcbiAqICAgICAgICAgICAgICAgICA7IFNpbmdsZSBsZXR0ZXJzOiB4L1ggaXMgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgdXNlXG4gKlxuICogICBwcml2YXRldXNlICAgID0gKFwieFwiL1wiWFwiKSAxKihcIi1cIiAoMSo4YWxwaGFudW0pKVxuICpcbiAqICAgZ3JhbmRmYXRoZXJlZCA9IDEqM0FMUEhBIDEqMihcIi1cIiAoMio4YWxwaGFudW0pKVxuICogICAgICAgICAgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvblxuICogICAgICAgICAgICAgICAgICAgOyBOb3RlOiBpIGlzIHRoZSBvbmx5IHNpbmdsZXRvblxuICogICAgICAgICAgICAgICAgICAgOyB0aGF0IHN0YXJ0cyBhIGdyYW5kZmF0aGVyZWQgdGFnXG4gKlxuICogICBhbHBoYW51bSAgICAgID0gKEFMUEhBIC8gRElHSVQpICAgICAgIDsgbGV0dGVycyBhbmQgbnVtYmVyc1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgRmlndXJlIDE6IExhbmd1YWdlIFRhZyBBQk5GXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJucyB7TG9jYWxlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VMb2NhbGUobG9jYWxlKSB7XG5cdGxvY2FsZSA9IHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG5cblx0bGV0IGxhbmd1YWdlO1xuXHRsZXQgcmVnaW9uO1xuXHRsZXQgdmFyaWFudHM7XG5cdGxldCBwYXJ0cztcblx0bGV0IHNjcmlwdDtcblx0bGV0IGV4dGxhbmc7XG5cdGNvbnN0IHJlZ2V4UmVndWxhciA9XG5cdFx0XCIoYXJ0LWxvamJhbnxjZWwtZ2F1bGlzaHxuby1ib2t8bm8tbnlufHpoLWd1b3l1fHpoLWhha2thfHpoLW1pbnx6aC1taW4tbmFufHpoLXhpYW5nKVwiO1xuXHRjb25zdCByZWdleElycmVndWxhciA9XG5cdFx0XCIoZW4tR0Itb2VkfGktYW1pfGktYm5ufGktZGVmYXVsdHxpLWVub2NoaWFufGktaGFrfGkta2xpbmdvbnxpLWx1eHxpLW1pbmdvfGktbmF2YWpvfGktcHdufGktdGFvfGktdGF5fGktdHN1fHNnbi1CRS1GUnxzZ24tQkUtTkx8c2duLUNILURFKVwiO1xuXHRjb25zdCByZWdleEdyYW5kZmF0aGVyZWQgPSBgKCR7cmVnZXhJcnJlZ3VsYXJ9fCR7cmVnZXhSZWd1bGFyfSlgO1xuXHRjb25zdCByZWdleFByaXZhdGVVc2UgPSBcIih4KC1bQS1aYS16MC05XXsxLDh9KSspXCI7XG5cdGNvbnN0IHJlZ2V4U2luZ2xldG9uID0gXCJbMC05QS1XWS1aYS13eS16XVwiO1xuXHRjb25zdCByZWdleEV4dGVuc2lvbiA9IGAoJHtyZWdleFNpbmdsZXRvbn0oLVtBLVphLXowLTldezIsOH0pKylgO1xuXHRjb25zdCByZWdleFZhcmlhbnQgPSBcIihbQS1aYS16MC05XXs1LDh9fFswLTldW0EtWmEtejAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4UmVnaW9uID0gXCIoW0EtWmEtel17Mn18WzAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4U2NyaXB0ID0gXCIoW0EtWmEtel17NH0pXCI7XG5cdGNvbnN0IHJlZ2V4RXh0bGFuZyA9IFwiKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSlcIjtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZSA9IGAoKFtBLVphLXpdezIsM30oLSR7cmVnZXhFeHRsYW5nfSk/KXxbQS1aYS16XXs0fXxbQS1aYS16XXs1LDh9KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3RhZyA9IGAoJHtyZWdleExhbmd1YWdlfSgtJHtyZWdleFNjcmlwdH0pPygtJHtyZWdleFJlZ2lvbn0pPygtJHtyZWdleFZhcmlhbnR9KSooLSR7cmVnZXhFeHRlbnNpb259KSooLSR7cmVnZXhQcml2YXRlVXNlfSk/KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2VUYWcgPSBgXigke3JlZ2V4R3JhbmRmYXRoZXJlZH18JHtyZWdleExhbmd0YWd9fCR7cmVnZXhQcml2YXRlVXNlfSkkYDtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4TGFuZ3VhZ2VUYWcpO1xuXHRsZXQgbWF0Y2g7XG5cblx0aWYgKChtYXRjaCA9IHJlZ2V4LmV4ZWMobG9jYWxlKSkgIT09IG51bGwpIHtcblx0XHRpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuXHRcdFx0cmVnZXgubGFzdEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoID09PSB1bmRlZmluZWQgfHwgbWF0Y2ggPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdH1cblxuXHRpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdGxhbmd1YWdlID0gbWF0Y2hbNl07XG5cblx0XHRwYXJ0cyA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKTtcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBwYXJ0c1swXTtcblx0XHRcdGV4dGxhbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2hbMTRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZWdpb24gPSBtYXRjaFsxNF07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRzY3JpcHQgPSBtYXRjaFsxMl07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTZdICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXJpYW50cyA9IG1hdGNoWzE2XTtcblx0fVxuXG5cdHJldHVybiBuZXcgTG9jYWxlKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vaTE4bi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSBcImVuXCI7XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gcmVhZCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBzZXQgYnkgdGhlIGRvY3VtZW50LlxuICogRm9yIHRoaXMgdGhlIGF0dHJpYnV0ZSBgbGFuZ2AgaW4gdGhlIGh0bWwgdGFnIGlzIHJlYWQuIElmIG5vIGF0dHJpYnV0ZSBpcyBzZXQsIGBlbmAgaXMgdXNlZCBhcyBkZWZhdWx0LlxuICogQWx0ZXJuYXRpdmVseSwgdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIGJyb3dzZXIgaXMgdXNlZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8aHRtbCBsYW5nPVwiZW5cIj5cbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIGBnZXRMb2NhbGVPZkRvY3VtZW50KClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR8Kn1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlc1xuICovXG5jb25zdCBnZXROYXZpZ2F0b3JMYW5ndWFnZSA9ICgpID0+IHtcblx0Y29uc3QgbmF2aWdhdG9yID0gZ2V0R2xvYmFsT2JqZWN0KFwibmF2aWdhdG9yXCIpO1xuXHRpZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eShcImxhbmd1YWdlXCIpKSB7XG5cdFx0Y29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cdFx0aWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gXCJzdHJpbmdcIiAmJiBsYW5ndWFnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbGFuZ3VhZ2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yPy5sYW5ndWFnZXM7XG5cdGlmIChBcnJheS5pc0FycmF5KGxhbmd1YWdlcykgJiYgbGFuZ3VhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGFuZ3VhZ2VzWzBdO1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UganVzdCBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBvcmRlciBzdGF5cyB0aGUgc2FtZS5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuNi4wIHRoZXJlIGlzIHRoZSBuZXcgUmFuZG9tSUQuIHRoaXMgSUQgY2xhc3MgaXMgY29udGludW91cyBmcm9tIG5vdyBvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIHdpdGggb3B0aW9ucyBmcm9tIHdoaWNoIHNvbWUgbW9uc3RlciBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWN0dWFsbHkgb25seSB1c2VkIGFzIGEgYmFzZSBjbGFzcy5cbiAqXG4gKiBDbGFzc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3B0aW9ucyBjYW4gYmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoaXMgY2xhc3MuXG4gKiBEZXJpdmVkIGNsYXNzZXMgYWxtb3N0IGFsd2F5cyBvdmVycmlkZSB0aGUgYGRlZmF1bGAgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuVHlwZXMuQmFzZX0gd2l0aCB7QGxpbmsgTW9uc3Rlci5UeXBlcy5lcXVpcFdpdGhJbnRlcm5hbH0gaW5zdGVhZC5cbiAqL1xuY2xhc3MgQmFzZVdpdGhPcHRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMsIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGdldHRlciBwcm92aWRlcyB0aGUgb3B0aW9ucy4gRGVyaXZlZCBjbGFzc2VzIG92ZXJ3cml0ZVxuXHQgKiB0aGlzIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuIEl0IGlzIGdvb2Qga2FybWEgdG8gYWx3YXlzIGluY2x1ZGVcblx0ICogdGhlIHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MuXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICAgbXlrZXk6IHRydWVcblx0ICogICAgIH0pO1xuXHQgKiB9XG5cdCAqXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXSkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGFkZFRvT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgUHJvdmlkZXIsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy45LjBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmtcIixcbik7XG5cbi8qKlxuICogQSBwcm92aWRlciBtYWtlcyBhIHRyYW5zbGF0aW9uIG9iamVjdCBhdmFpbGFibGUuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBQcm92aWRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3Byb3ZpZGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEByZXR1cm4ge1Byb3ZpZGVyfVxuXHQgKi9cblx0YXNzaWduVG9FbGVtZW50KGxvY2FsZSwgZWxlbWVudCkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICghKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkxvY2FsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbnMobG9jYWxlKS50aGVuKChvYmopID0+IHtcblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0aWYgKGhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0Y29uc3Qgb2JqZWN0cyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbyBvZiBvYmplY3RzKSB7XG5cdFx0XHRcdFx0aWYgKG8gaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHRyYW5zbGF0aW9ucyA9IG87XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUcmFuc2xhdGlvbnNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKG9iaik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCwgb2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TGlua2VkT2JqZWN0cywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9IGZyb20gXCIuL3Byb3ZpZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2xhdGlvbnMsIGdldERvY3VtZW50VHJhbnNsYXRpb25zIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGNsYXNzIHlvdSBjYW4gbWFuYWdlIHRyYW5zbGF0aW9ucyBhbmQgYWNjZXNzIHRoZSBrZXlzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIFRyYW5zbGF0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobG9jYWxlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpIHtcblx0XHRcdHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IHBhcnNlTG9jYWxlKHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcmFnZSA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBhIHRleHQgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICovXG5cdGdldFRleHQoa2V5LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRpZiAoZGVmYXVsdFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGtleSAke2tleX0gbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0XHRpZiAoaXNPYmplY3QocikpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgXCJvdGhlclwiLCBkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIG51bWJlciBgY291bnRgIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QuIEluIGFkZGl0aW9uIHRvIGEgbnVtYmVyLCBvbmUgb2YgdGhlIGtleXdvcmRzIGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseS5cblx0ICogXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuIFJlbWVtYmVyOiBub3QgZXZlcnkgbGFuZ3VhZ2UgaGFzIGFsbCBydWxlcy5cblx0ICpcblx0ICogVGhlIGFwcHJvcHJpYXRlIHRleHQgZm9yIHRoaXMgbnVtYmVyIGlzIHRoZW4gc2VsZWN0ZWQuIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge2ludGVnZXJ8c3RyaW5nfSBjb3VudFxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldFBsdXJhbFJ1bGVUZXh0KGtleSwgY291bnQsIGRlZmF1bHRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLnN0b3JhZ2UuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHZhbGlkYXRlT2JqZWN0KHRoaXMuc3RvcmFnZS5nZXQoa2V5KSk7XG5cblx0XHRsZXQga2V5d29yZDtcblx0XHRpZiAoaXNTdHJpbmcoY291bnQpKSB7XG5cdFx0XHRrZXl3b3JkID0gY291bnQudG9Mb2NhbGVTdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y291bnQgPSB2YWxpZGF0ZUludGVnZXIoY291bnQpO1xuXHRcdFx0aWYgKGNvdW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHplcm8gY291bnRcblx0XHRcdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoXCJ6ZXJvXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHI/Lnplcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGtleXdvcmQgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyh0aGlzLmxvY2FsZS50b1N0cmluZygpKS5zZWxlY3QoXG5cdFx0XHRcdHZhbGlkYXRlSW50ZWdlcihjb3VudCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChyLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltrZXl3b3JkXSk7XG5cdFx0fVxuXG5cdFx0Ly8gQGRlcHJlY2F0ZWQgc2luY2UgMjAyMy0wMy0xNFxuXHRcdC8vIERFRkFVTFRfS0VZIGlzIHVuZGVmaW5lZFxuXHRcdC8vIGlmIChyLmhhc093blByb3BlcnR5KERFRkFVTFRfS0VZKSkge1xuXHRcdC8vICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcocltERUZBVUxUX0tFWV0pO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgdGV4dCBmb3IgYSBrZXlcblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDFcIiwgXCJNYWtlIG15IGRheSFcIik7XG5cdCAqIC8vIHBsdXJhbCBydWxlc1xuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQ2XCIsIHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSB0ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XG5cdCAqL1xuXHRzZXRUZXh0KGtleSwgdGV4dCkge1xuXHRcdGlmIChpc1N0cmluZyh0ZXh0KSB8fCBpc09iamVjdCh0ZXh0KSkge1xuXHRcdFx0dGhpcy5zdG9yYWdlLnNldCh2YWxpZGF0ZVN0cmluZyhrZXkpLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIG92ZXJsYXlzIGZyb20gYW4gb2JqZWN0LiBUaGUga2V5cyBhcmUgdHJhbnNmZXJyZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBlbnRlcmVkXG5cdCAqIGFzIHRleHQuXG5cdCAqXG5cdCAqIFRoZSB2YWx1ZXMgY2FuIGVpdGhlciBiZSBjaGFyYWN0ZXIgc3RyaW5ncyBvciwgaW4gdGhlIGNhc2Ugb2YgdGV4dHMgd2l0aCBwbHVyYWwgZm9ybXMsIG9iamVjdHMuIFRoZSBwbHVyYWwgZm9ybXNcblx0ICogbXVzdCBiZSBzdG9yZWQgYXMgdGV4dCB2aWEgYSBzdGFuZGFyZCBrZXkgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuXG5cdCAqXG5cdCAqIEFkZGl0aW9uYWxseSwgdGhlIGtleSBkZWZhdWx0IGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBubyBvdGhlciBrZXkgZml0cy5cblx0ICpcblx0ICogSW4gc29tZSBsYW5ndWFnZXMsIGxpa2UgZm9yIGV4YW1wbGUgaW4gR2VybWFuLCB0aGVyZSBpcyBubyBvd24gbW9yZSBudW1iZXIgYXQgdGhlIHZhbHVlIDAuIEluIHRoZXNlIGxhbmd1YWdlcyxcblx0ICogdGhlIGZ1bmN0aW9uIGFwcGxpZXMgYWRkaXRpb25hbGx5IHplcm8uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKHtcblx0ICogICBcInRleHQxXCI6IFwiTWFrZSBteSBkYXkhXCIsXG5cdCAqICAgXCJ0ZXh0MlwiOiBcIkknbGwgYmUgYmFjayFcIixcblx0ICogICBcInRleHQ2XCI6IHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2xhdGlvbnNcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0YXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHRyYW5zbGF0aW9ucyk7XG5cblx0XHRpZiAodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMuc3RvcmFnZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gW2VsZW1lbnRdIC0gRWxlbWVudCB0byBzZWFyY2ggZm9yIHRyYW5zbGF0aW9ucy4gRGVmYXVsdDogZWxlbWVudCB3aXRoIG9iamVjdGxpbmsgQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGluay5cbiAqIEByZXR1cm5zIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW1lbnQpIHtcblx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGVsZW1lbnQgPSBkLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgWyR7QVRUUklCVVRFX09CSkVDVExJTkt9fj1cIiR7dHJhbnNsYXRpb25zTGlua1N5bWJvbC50b1N0cmluZygpfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIkNhbm5vdCBmaW5kIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCBhIHRyYW5zbGF0aW9ucyBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0aWYgKCFoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXCIpO1xuXHR9XG5cblx0Y29uc3Qgb2JqID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblxuXHRmb3IgKGNvbnN0IHQgb2Ygb2JqKSB7XG5cdFx0aWYgKHQgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdHJhbnNsYXRpb25zLlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdGdldERvY3VtZW50VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVCb29sZWFuLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zZm9ybWVyIH07XG5cbi8qKlxuICogVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jdHJhbnNmb3JtZXJ8TW9uc3RlciBEb2NzfVxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL3RyYW5zZm9ybWVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXG5cdFx0aWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVPYmplY3QoY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFja3Muc2V0KG5hbWUsIHtcblx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcblx0XHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJucyB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcodmFsdWUpIHtcblx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcInRvU3RyaW5nXCIpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXHR9XG5cblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdHRydWVTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3ModHJ1ZVN0YXRlbWVudCwgdmFsdWUpO1xuXHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZmFsc2VTdGF0ZW1lbnQsIHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNvbmRpdGlvbiA/IHRydWVTdGF0ZW1lbnQgOiBmYWxzZVN0YXRlbWVudDtcblxuXHRcdGNhc2UgXCJ1Y2ZpcnN0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGZpcnN0Y2hhciA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZpcnN0Y2hhciArIHZhbHVlLnN1YnN0cigxKTtcblx0XHRjYXNlIFwidWN3b3Jkc1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShcblx0XHRcdFx0L14oW2EtelxcdTAwRTAtXFx1MDBGQ10pfFxccysoW2EtelxcdTAwRTAtXFx1MDBGQ10pL2csXG5cdFx0XHRcdGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHYudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiY291bnRcIjpcblx0XHRjYXNlIFwibGVuZ3RoXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1N0cmluZyh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSAmJlxuXHRcdFx0XHR2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcImxlbmd0aFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG5cblx0XHRjYXNlIFwidG8tYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJ0b2FcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYnRvYShjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJhdG9iXCI6XG5cdFx0Y2FzZSBcImZyb20tYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYXRvYihjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJlbXB0eVwiOlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cblx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QoY29uc29sZSkpIHtcblx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwicHJlZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBwcmVmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgdmFsdWU7XG5cblx0XHRjYXNlIFwic3VmZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBzdWZmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyBzdWZmaXg7XG5cblx0XHRjYXNlIFwidW5pcWlkXCI6XG5cdFx0XHRyZXR1cm4gbmV3IElEKCkudG9TdHJpbmcoKTtcblxuXHRcdGNhc2UgXCJmaXJzdC1rZXlcIjpcblx0XHRjYXNlIFwibGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1rZXlcIjpcblx0XHRcdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG5cblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwiZmlyc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0gMDtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcImxhc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gdmFsaWRhdGVJbnRlZ2VyKHBhcnNlSW50KGFyZ3Muc2hpZnQoKSkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwibnRoLWxhc3Qta2V5XCIpIHtcblx0XHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIGtleSAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IHVzZUtleSA9IGtleXM/LltrZXldO1xuXG5cdFx0XHRpZiAodmFsdWU/Llt1c2VLZXldKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZT8uW3VzZUtleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cblx0XHRjYXNlIFwia2V5XCI6XG5cdFx0Y2FzZSBcInByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImluZGV4XCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlLmdldChrZXkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZT8uW2tleV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU/LltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcInBhdGgtZXhpc3RzXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFBhdGhmaW5kZXIodmFsdWUpLmV4aXN0cyhrZXkpO1xuXG5cdFx0Y2FzZSBcImNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgcGYyID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXHRcdFx0bGV0IGNvbmNhdCA9IFwiXCI7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYWRkIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0aWYgKGlzU3RyaW5nKGtleSkgJiYga2V5LnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBmMi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdiA9IHBmMi5nZXRWaWEoa2V5KTtcblx0XHRcdFx0aWYgKCFpc1ByaW1pdGl2ZSh2KSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIG5vdCBwcmltaXRpdmVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25jYXQgKz0gdjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbmNhdDtcblx0XHRjYXNlIFwicGF0aFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cblx0XHRcdGlmICghcGYuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBmLmdldFZpYShrZXkpO1xuXG5cdFx0Y2FzZSBcInN1YnN0cmluZ1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IHBhcnNlSW50KGFyZ3NbMF0pIHx8IDA7XG5cdFx0XHRjb25zdCBlbmQgPSAocGFyc2VJbnQoYXJnc1sxXSkgfHwgMCkgKyBzdGFydDtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuXHRcdGNhc2UgXCJub3BcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCI/P1wiOlxuXHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWZhdWx0VHlwZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChkZWZhdWx0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmF1bHRUeXBlID0gXCJzdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChkZWZhdWx0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gYCR7ZGVmYXVsdFZhbHVlfWA7XG5cdFx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShhdG9iKGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleVZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleVZhbHVlID0ga2V5VmFsdWUuc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRtYXAuc2V0KGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXAuZ2V0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJlcXVhbHNcIjpcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHZhbHVlIHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBlcXVhbHNWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgaGlzdG9yeSBvZiBcdTIwMUN0eXBlb2YgbnVsbFx1MjAxRFxuXHRcdFx0ICogaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRcdFx0ICogSW4gSmF2YVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsIHdoaWNoIGluY29ycmVjdGx5IHN1Z2dlc3RzXG5cdFx0XHQgKiB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcIm51bGxcIjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mVmFsdWUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdHN3aXRjaCAodHlwZU9mVmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gZXF1YWxzVmFsdWU7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHBhcnNlRmxvYXQoZXF1YWxzVmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gKGVxdWFsc1ZhbHVlID09PSBcInRydWVcIiB8fCBlcXVhbHNWYWx1ZSA9PT0gXCJvblwiKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwibW9uZXlcIjpcblx0XHRjYXNlIFwiY3VycmVuY3lcIjpcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmVyd2VuZGVuIHZvbiBSZWdFeHAsIHVtIFdcdTAwRTRocnVuZyB1bmQgQmV0cmFnIHp1IGV4dHJhaGllcmVuXG5cdFx0XHRjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtBLVpdezN9KVtcXHMtXSooXFxkKyhcXC5cXGQrKT8pJC8pO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGN1cnJlbmN5IGZvcm1hdFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVuY3kgPSBtYXRjaFsxXTtcblx0XHRcdGNvbnN0IGFtb3VudCA9IG1hdGNoWzJdO1xuXG5cdFx0XHRjb25zdCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBhcmdzPy5bMF0gfHwgMjtcblx0XHRcdGNvbnN0IHJvdW5kaW5nSW5jcmVtZW50ID0gYXJncz8uWzFdIHx8IDU7XG5cblx0XHRcdGNvbnN0IG5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwge1xuXHRcdFx0XHRzdHlsZTogXCJjdXJyZW5jeVwiLFxuXHRcdFx0XHRjdXJyZW5jeTogY3VycmVuY3ksXG5cdFx0XHRcdG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4aW11bUZyYWN0aW9uRGlnaXRzLFxuXHRcdFx0XHRyb3VuZGluZ0luY3JlbWVudDogcm91bmRpbmdJbmNyZW1lbnQsXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5mLmZvcm1hdChhbW91bnQpO1xuXG5cdFx0Y2FzZSBcInRpbWVzdGFtcFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0aWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRpbWVzdGFtcDtcblxuXHRcdGNhc2UgXCJ0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVmb3JtYXRcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBhcmdzLnNoaWZ0KCkgfHwgXCJtZWRpdW1cIixcblx0XHRcdFx0dGltZVN0eWxlOiBhcmdzLnNoaWZ0KCkgfHwgXCJtZWRpdW1cIixcblx0XHRcdH07XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwieWVhclwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG5cdFx0Y2FzZSBcIm1vbnRoXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXG5cdFx0Y2FzZSBcImRheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG5cblx0XHRjYXNlIFwid2Vla2RheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXkoKTtcblxuXHRcdGNhc2UgXCJob3VyXCI6XG5cdFx0Y2FzZSBcImhvdXJzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG5cblx0XHRjYXNlIFwibWludXRlXCI6XG5cdFx0Y2FzZSBcIm1pbnV0ZXNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxuXHRcdGNhc2UgXCJzZWNvbmRzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcblxuXHRcdGNhc2UgXCJpMThuXCI6XG5cdFx0Y2FzZSBcInRyYW5zbGF0aW9uXCI6XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRrZXkgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG5cdFx0Y2FzZSBcInNldC10b2dnbGVcIjpcblx0XHRjYXNlIFwic2V0LXNldFwiOlxuXHRcdGNhc2UgXCJzZXQtcmVtb3ZlXCI6XG5cdFx0XHRjb25zdCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7dGhpcy5jb21tYW5kfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhpbnB1dCwgdmFsdWUpIHtcblx0c3dpdGNoIChpbnB1dCkge1xuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgXCJcXFxcdmFsdWVcIjpcblx0XHRcdHJldHVybiBcInZhbHVlXCI7XG5cdFx0Y2FzZSBcIlxcXFx1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIlxcXFxudWxsXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlQ29uZGl0aW9uKHZhbHVlKSB7XG5cdGNvbnN0IGxvd2VyVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG5cblx0cmV0dXJuIChcblx0XHQodmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHZhbHVlICE9PSBcIlwiICYmXG5cdFx0XHRsb3dlclZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRsb3dlclZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdHZhbHVlICE9PSBmYWxzZSkgfHxcblx0XHRsb3dlclZhbHVlID09PSBcIm9uXCIgfHxcblx0XHRsb3dlclZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdHZhbHVlID09PSB0cnVlXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vdHJhbnNmb3JtZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBpcGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCJ8XCI7XG5cbi8qKlxuICogVGhlIHBpcGUgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gY29tYmluZSBzZXZlcmFsIHByb2Nlc3Npbmcgc3RlcHMuXG4gKlxuICogQSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG4gKlxuICogV2l0aCB0aGUgUGlwZSwgcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgY29tYmluZWQuIEhlcmUsIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMgYWNjZXNzZWQgdmlhIHRoZSBwYXRoZmluZGVyIChwYXRoIGNvbW1hbmQpLlxuICogdGhlIHdvcmQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGxldHRlcnMgYW5kIGEgcHJlZml4IEhlbGxvIGlzIGFkZGVkLiB0aGUgdHdvIGJhY2tzbGFzaCBzYWZlIHRoZSBzcGFjZSBjaGFyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgIC4uLy4uL2V4YW1wbGUvZGF0YS9waXBlLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFBpcGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwaXBlIGEgcGlwZSBjb25zaXN0cyBvZiBjb21tYW5kcyB3aG9zZSBpbnB1dCBhbmQgb3V0cHV0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGlwZSBzeW1ib2wgYHxgLlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwaXBlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhwaXBlKTtcblxuXHRcdHRoaXMucGlwZSA9IHBpcGUuc3BsaXQoREVMSU1JVEVSKS5tYXAoKHYpID0+IHtcblx0XHRcdHJldHVybiBuZXcgVHJhbnNmb3JtZXIodik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdGZvciAoY29uc3QgWywgdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5waXBlKSkge1xuXHRcdFx0dC5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcnVuIGEgcGlwZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucGlwZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmFuc2Zvcm1lciwgY3VycmVudEluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRyYW5zZm9ybWVyLnJ1bihhY2N1bXVsYXRvcik7XG5cdFx0fSwgdmFsdWUpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxPYmplY3RTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE9iamVjdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd2F0Y2hkb2dTeW1ib2wgPSBTeW1ib2woXCJ3YXRjaGRvZ1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyT3BlbkluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyT3BlbkluZGV4XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYXJrZXJDbG9zZUluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyY2xvc2VJbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd29ya2luZ0RhdGFTeW1ib2wgPSBTeW1ib2woXCJ3b3JraW5nRGF0YVwiKTtcblxuLyoqXG4gKiBNZXNzYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggdGhlIGZvcm1hdHRlci4gVG8gZG8gdGhpcywgYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLiBUaGUgbWVzc2FnZSBjYW4gdGhlbiBjb250YWluIHBsYWNlaG9sZGVycy5cbiAqXG4gKiBMb29rIGF0IHRoZSBleGFtcGxlIGJlbG93LiBUaGUgcGxhY2Vob2xkZXJzIHVzZSB0aGUgbG9naWMgb2YgUGlwZS5cbiAqXG4gKiAjIyBNYXJrZXIgaW4gbWFya2VyXG4gKlxuICogTWFya2VycyBjYW4gYmUgbmVzdGVkLiBIZXJlLCB0aGUgaW5uZXIgbWFya2VyIGlzIHJlc29sdmVkIGZpcnN0IGAke3N1YmtleX0gXHUyMUE2IDEgPSAke215a2V5Mn1gIGFuZCB0aGVuIHRoZSBvdXRlciBtYXJrZXIgYCR7bXlrZXkyfWAuXG4gKlxuICogYGBgXG4gKiBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAqIGxldCBvYmogPSB7XG4gKiAgbXlrZXkyOiBcIjFcIixcbiAqICBzdWJrZXk6IFwiMlwiXG4gKiB9O1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCk7XG4gKiAvLyBcdTIxQTYgMVxuICogYGBgXG4gKlxuICogIyMgQ2FsbGJhY2tzXG4gKlxuICogVGhlIHZhbHVlcyBpbiBhIGZvcm1hdHRlciBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSBjb21tYW5kcyBvZiB0aGUgYFRyYW5zZm9ybWVyYCBvciB0aGVgUGlwZWAuXG4gKiBUaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgY2FsbGJhY2tzLlxuICpcbiAqIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAqICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICogICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIidcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH0pO1xuICpcbiAqIGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpXG4gKiAvLyBcdTIxQTYgXCIxXCJcbiAqXG4gKiAjIyBNYXJrZXIgd2l0aCBwYXJhbWV0ZXJcbiAqXG4gKiBBIHN0cmluZyBjYW4gYWxzbyBicmluZyBpdHMgb3duIHZhbHVlcy4gVGhlc2UgbXVzdCB0aGVuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBrZXkgYnkgYSBzZXBhcmF0b3IgYDo6YC5cbiAqIFRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdmFsdWUgYnkgYSBzZXBhcmF0b3IgYD1gLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBwaXBlLCB5b3UgbXVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzZXBhcmF0b3JzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyc7XG4gKlxuICogbmV3IEZvcm1hdHRlcih7XG4gKiAgICAgICBhOiB7XG4gKiAgICAgICAgICAgYjoge1xuICogICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAqICAgICAgIH1cbiAqICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIik7IC8vIHdpdGggcGlwZVxuICpcbiAqIC8vIFx1MjFBNiBIZWxsbyBXb3JsZCFcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UZXh0XG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0XG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSA9IG9iamVjdCB8fCB7fTtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzPXt9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdFx0cGFyYW1ldGVyOiB7XG5cdFx0XHRcdGRlbGltaXRlcjogXCI6OlwiLFxuXHRcdFx0XHRhc3NpZ25tZW50OiBcIj1cIixcblx0XHRcdH0sXG5cdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgUGFyYW1ldGVyIENoYXJhY3RlclxuXHQgKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNoYXJzIGFyZSBgOjpgIGFuZCBgPWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnIycpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ1snLCddJyk7XG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhc3NpZ25tZW50XG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0UGFyYW1ldGVyQ2hhcnMoZGVsaW1pdGVyLCBhc3NpZ25tZW50KSB7XG5cdFx0aWYgKGRlbGltaXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdID1cblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoYXNzaWdubWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG5ldyBNYXJrZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRNYXJrZXIoJyMnKTsgLy8gb3BlbiBhbmQgY2xvc2UgYXJlIGJvdGggI1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdpMThueycsJ30nKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfSBvcGVuXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfHVuZGVmaW5lZH0gY2xvc2Vcblx0ICogQHJldHVybiB7Rm9ybWF0dGVyfVxuXHQgKiBAc2luY2UgMS4xMi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRNYXJrZXIob3BlbiwgY2xvc2UpIHtcblx0XHRpZiAoY2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xvc2UgPSBvcGVuO1xuXHRcdH1cblxuXHRcdGlmIChpc1N0cmluZyhvcGVuKSkgb3BlbiA9IFtvcGVuXTtcblx0XHRpZiAoaXNTdHJpbmcoY2xvc2UpKSBjbG9zZSA9IFtjbG9zZV07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcIm9wZW5cIl0gPSB2YWxpZGF0ZUFycmF5KG9wZW4pO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0gPSB2YWxpZGF0ZUFycmF5KGNsb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0b28gZGVlcCBuZXN0aW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHRoaXNbd2F0Y2hkb2dTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0ge307XG5cdFx0cmV0dXJuIGZvcm1hdC5jYWxsKHRoaXMsIHRleHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHRleHQpIHtcblx0dGhpc1t3YXRjaGRvZ1N5bWJvbF0rKztcblx0aWYgKHRoaXNbd2F0Y2hkb2dTeW1ib2xdID4gMjApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZGVlcCBuZXN0aW5nXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3Blbk1hcmtlciA9XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdXTtcblx0Y29uc3QgY2xvc2VNYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdXTtcblxuXHQvLyBjb250YWlucyBubyBwbGFjZWhvbGRlcnNcblx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gLTEgfHwgdGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCksXG5cdFx0b3Blbk1hcmtlcixcblx0XHRjbG9zZU1hcmtlcixcblx0KTtcblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uW3RoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gKyAxXVxuXHQpIHtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRyZXN1bHQgPSBmb3JtYXQuY2FsbCh0aGlzLCByZXN1bHQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTIuMFxuICogQHBhcmFtIHRleHRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemUodGV4dCwgb3Blbk1hcmtlciwgY2xvc2VNYXJrZXIpIHtcblx0Y29uc3QgZm9ybWF0dGVkID0gW107XG5cblx0Y29uc3QgcGFyYW1ldGVyQXNzaWdubWVudCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXTtcblx0Y29uc3QgcGFyYW1ldGVyRGVsaW1pdGVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl07XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tzXCJdO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHQvLyBubyBtYXJrZXJcblx0XHRpZiAoc3RhcnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIGlmIChzdGFydEluZGV4ID4gMCkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkpO1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuXHRcdH1cblxuXHRcdGxldCBlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRsZXQgaW5zaWRlU3RhcnRJbmRleCA9IHRleHRcblx0XHRcdC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpXG5cdFx0XHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRcdGluc2lkZVN0YXJ0SW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCA8IGVuZEluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRva2VuaXplLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhpbnNpZGVTdGFydEluZGV4KSxcblx0XHRcdFx0XHRvcGVuTWFya2VyLFxuXHRcdFx0XHRcdGNsb3NlTWFya2VyLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaW5zaWRlU3RhcnRJbmRleCkgKyByZXN1bHQ7XG5cdFx0XHRcdGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdFx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5kSW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtleSA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoLCBlbmRJbmRleCk7XG5cdFx0Y29uc3QgcGFydHMgPSBrZXkuc3BsaXQocGFyYW1ldGVyRGVsaW1pdGVyKTtcblx0XHRjb25zdCBjdXJyZW50UGlwZSA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0sXG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBrdiBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3QgW2ssIHZdID0ga3Yuc3BsaXQocGFyYW1ldGVyQXNzaWdubWVudCk7XG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXVtrXSA9IHY7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdDEgPSBrZXkuc3BsaXQoXCJ8XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwaXBlIHN5bWJvbFxuXHRcdGNvbnN0IHQyID0gdDEuc3BsaXQoXCI6OlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHQzID0gdDIuc3BsaXQoXCIuXCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwYXRoIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdPy5bdDNdID8gXCJwYXRoOlwiIDogXCJzdGF0aWM6XCI7XG5cblx0XHRsZXQgY29tbWFuZCA9IFwiXCI7XG5cdFx0aWYgKFxuXHRcdFx0cHJlZml4ICYmXG5cdFx0XHRrZXkuaW5kZXhPZihwcmVmaXgpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInBhdGg6XCIpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInN0YXRpYzpcIikgIT09IDBcblx0XHQpIHtcblx0XHRcdGNvbW1hbmQgPSBwcmVmaXg7XG5cdFx0fVxuXG5cdFx0Y29tbWFuZCArPSBjdXJyZW50UGlwZTtcblxuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjb21tYW5kKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3JtYXR0ZWQucHVzaCh2YWxpZGF0ZVN0cmluZyhwaXBlLnJ1bih0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSkpKTtcblxuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgTWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcmFtZXRlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIE1lZGlhVHlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN1YnR5cGVcblx0ICogQHBhcmFtIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKHR5cGUsIHN1YnR5cGUsIHBhcmFtZXRlcikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdHR5cGU6IHZhbGlkYXRlU3RyaW5nKHR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRzdWJ0eXBlOiB2YWxpZGF0ZVN0cmluZyhzdWJ0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0cGFyYW1ldGVyOiBbXSxcblx0XHR9O1xuXG5cdFx0aWYgKHBhcmFtZXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXSA9IHZhbGlkYXRlQXJyYXkocGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9tZWRpYS10eXBlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0cmluZ31cblx0ICovXG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS50eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0cmluZ31cblx0ICovXG5cdGdldCBzdWJ0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5zdWJ0eXBlO1xuXHR9XG5cblx0Ly8gLyoqXG5cdC8vICAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119XG5cdC8vICAqL1xuXHQvLyBnZXQgcGFyYW1ldGVyKCkge1xuXHQvLyBcdHJldHVybiB0aGlzW2ludGVybmFsXS5wYXJhbWV0ZXI7XG5cdC8vIH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHJldHVybiB7TWFwfVxuXHQgKi9cblx0Z2V0IHBhcmFtZXRlcigpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXS5mb3JFYWNoKChwKSA9PiB7XG5cdFx0XHRsZXQgdmFsdWUgPSBwLnZhbHVlO1xuXG5cdFx0XHQvLyBpbnRlcm5hbGx5IHNwZWNpYWwgdmFsdWVzIGFyZSBwYXJ0bHkgc3RvcmVkIHdpdGggcXVvdGVzLCB0aGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlbS5cblx0XHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQuc2V0KHAua2V5LCB2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcmFtZXRlciA9IFtdO1xuXHRcdGZvciAoY29uc3QgYSBvZiB0aGlzW2ludGVybmFsXS5wYXJhbWV0ZXIpIHtcblx0XHRcdHBhcmFtZXRlci5wdXNoKGAke2Eua2V5fT0ke2EudmFsdWV9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke3RoaXNbaW50ZXJuYWxdLnR5cGV9LyR7dGhpc1tpbnRlcm5hbF0uc3VidHlwZX0ke1xuXHRcdFx0cGFyYW1ldGVyLmxlbmd0aCA+IDAgPyBgOyR7cGFyYW1ldGVyLmpvaW4oXCI7XCIpfWAgOiBcIlwiXG5cdFx0fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogY29uc29sZS5sb2coTW9uc3Rlci5UeXBlcy5wYXJzZU1lZGlhVHlwZSgpKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3BhcnNlTWVkaWFUeXBlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhwYXJzZU1lZGlhVHlwZSgpKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBTcGVjaWZpY2F0aW9uOlxuICpcbiAqIGBgYFxuICogZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICogbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gKiBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gKiBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lZGlhdHlwZVxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5NZWRpYVR5cGV9XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjA0NSNzZWN0aW9uLTUuMVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gbWFsZm9ybWVkIGRhdGEgdXJsXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuXHRpZiAoIWlzU3RyaW5nKHBhcmFtZXRlcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0cGFyYW1ldGVyLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdGVudHJ5ID0gZW50cnkudHJpbSgpO1xuXHRcdGlmIChlbnRyeSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGt2ID0gZW50cnkuc3BsaXQoXCI9XCIpO1xuXG5cdFx0Y29uc3Qga2V5ID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlswXSkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlsxXSkudHJpbSgpO1xuXG5cdFx0Ly8gaWYgdmFsdWVzIGFyZSBxdW90ZWQsIHRoZXkgcmVtYWluIHNvIGludGVybmFsbHlcblx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfSBtZWRpYXR5cGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiYXNlNjQ9dHJ1ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjQpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG1lZGlhdHlwZSkpIHtcblx0XHRcdG1lZGlhdHlwZSA9IHBhcnNlTWVkaWFUeXBlKG1lZGlhdHlwZSk7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbF0gPSB7XG5cdFx0XHRjb250ZW50OiB2YWxpZGF0ZVN0cmluZyhjb250ZW50KSxcblx0XHRcdG1lZGlhdHlwZTogdmFsaWRhdGVJbnN0YW5jZShtZWRpYXR5cGUsIE1lZGlhVHlwZSksXG5cdFx0XHRiYXNlNjQ6IHZhbGlkYXRlQm9vbGVhbihiYXNlNjQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBiYXNlNjQpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5wYXJzZURhdGFVUkwoKWAuXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhdXJsXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLkRhdGFVcmx9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VEYXRhVVJMKGRhdGF1cmwpIHtcblx0dmFsaWRhdGVTdHJpbmcoZGF0YXVybCk7XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwudHJpbSgpO1xuXG5cdGlmIChkYXRhdXJsLnN1YnN0cmluZygwLCA1KSAhPT0gXCJkYXRhOlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImluY29ycmVjdCBvciBtaXNzaW5nIGRhdGEgcHJvdG9jb2xcIik7XG5cdH1cblxuXHRkYXRhdXJsID0gZGF0YXVybC5zdWJzdHJpbmcoNSk7XG5cblx0Y29uc3QgcCA9IGRhdGF1cmwuaW5kZXhPZihcIixcIik7XG5cdGlmIChwID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtYWxmb3JtZWQgZGF0YSB1cmxcIik7XG5cdH1cblxuXHRsZXQgY29udGVudCA9IGRhdGF1cmwuc3Vic3RyaW5nKHAgKyAxKTtcblx0Y29uc3QgbWVkaWF0eXBlQW5kQmFzZTY0ID0gZGF0YXVybC5zdWJzdHJpbmcoMCwgcCkudHJpbSgpO1xuXHRsZXQgbWVkaWF0eXBlID0gXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUlcIjtcblx0bGV0IGJhc2U2NEZsYWcgPSBmYWxzZTtcblxuXHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0ICE9PSBcIlwiKSB7XG5cdFx0bWVkaWF0eXBlID0gbWVkaWF0eXBlQW5kQmFzZTY0O1xuXHRcdGlmIChtZWRpYXR5cGVBbmRCYXNlNjQuZW5kc1dpdGgoXCJiYXNlNjRcIikpIHtcblx0XHRcdGNvbnN0IGkgPSBtZWRpYXR5cGVBbmRCYXNlNjQubGFzdEluZGV4T2YoXCI7XCIpO1xuXHRcdFx0bWVkaWF0eXBlID0gbWVkaWF0eXBlQW5kQmFzZTY0LnN1YnN0cmluZygwLCBpKTtcblx0XHRcdGJhc2U2NEZsYWcgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZW50ID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpO1xuXHRcdH1cblxuXHRcdG1lZGlhdHlwZSA9IHBhcnNlTWVkaWFUeXBlKG1lZGlhdHlwZSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0fVxuXG5cdHJldHVybiBuZXcgRGF0YVVybChjb250ZW50LCBtZWRpYXR5cGUsIGJhc2U2NEZsYWcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFF1ZXVlIH07XG5cbi8qKlxuICogQSBxdWV1ZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgcHJvY2Vzc2VkIG9uZSBhZnRlciBhbm90aGVyIChmaXJzdCBpbiwgZmlyc3Qgb3V0KS5cbiAqXG4gKiBXaXRoIGEgcXVldWUgeW91IGNhbiBhZGQgaXRlbXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBgUXVldWUuYWRkKClgIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IGBRdWV1ZS5wb3AoKWAuXG4gKlxuICogV2l0aCBgUXVldWUucGVlaygpYCB5b3UgY2FuIGdldCB0aGUgZmlyc3QgaXRlbSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSBgbmV3IFF1ZXVlKClgLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9xdWV1ZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3F1ZXVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlYWQgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBVbmlxdWVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIFVuaXF1ZVF1ZXVlIGlzIGEgcXVldWUgdGhhdCBjb250YWlucyBpdGVtcyBvbmx5IG9uY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh2YWx1ZSk7XG5cblx0XHRpZiAoIXRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5oYXModmFsdWUpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuYWRkKHZhbHVlKTtcblx0XHRcdHN1cGVyLmFkZCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlID0gbmV3IFdlYWtTZXQoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5zaGlmdCgpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5kZWxldGUodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4vdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHsgVW5pcXVlUXVldWUgfSBmcm9tIFwiLi91bmlxdWVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogVGhlIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIHN1YmplY3Qgb2JqZWN0IGFzIHRoaXMgcG9pbnRlci4gRm9yIHRoaXMgcmVhc29uXG4gKiB0aGUgY2FsbGJhY2sgc2hvdWxkIG5vdCBiZSBhbiBhcnJvdyBmdW5jdGlvbiwgYmVjYXVzZSBpdCBnZXRzIHRoaXMgcG9pbnRlciBvZiBpdHMgb3duIGNvbnRleHQuXG4gKlxuICogSW5jbHVkZSB0aGlzIGNsYXNzIGluIHlvdXIgcHJvamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogYGBganNcbiAqIG5ldyBPYnNlcnZlcigoKT0+e1xuICogICAgIC8vIHRoaXMgaXMgbm90IHN1YmplY3RcbiAqIH0pXG4gKlxuICogbmV3IE9ic2VydmVyKGZ1bmN0aW9uKCkge1xuICogICAgIC8vIHRoaXMgaXMgc3ViamVjdFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBUbyBkbyB0aGlzLCBzaW1wbHkgc3BlY2lmeSB0aGVtLlxuICpcbiAqIGBgYGpzXG4gKiBPYnNlcnZlcihmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgICAgY29uc29sZS5sb2coYSwgYiwgYyk7IC8vIFx1MjFBNiBcImFcIiwgMiwgdHJ1ZVxuICogfSwgXCJhXCIsIDIsIHRydWUpXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYXZlIGFzIG1hbnkgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMgYXJlIGdpdmVuLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9vYnNlcnZlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJucyB7T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhZGRUYWcodGFnKSB7XG5cdFx0dGhpcy50YWdzLmFkZCh0YWcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRnZXRUYWdzKCkge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuZW50cmllcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNUYWcodGFnKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5jb250YWlucyh0YWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRpZiAoIWlzT2JqZWN0KHN1YmplY3QpKSB7XG5cdFx0XHRcdHJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5xdWV1ZS5hZGQoc3ViamVjdCk7XG5cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIHRoZSBxdWV1ZSBhbmQgdGhlIGBzZXRUaW1lb3V0YCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZlckxpc3QgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBPYnNlcnZlckxpc3QgY2xhc3MsIG9ic2VydmVyIGNhbiBiZSBtYW5hZ2VkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgT2JzZXJ2ZXJMaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9ic2VydmVycyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGF0dGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGRldGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHR0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGNvbnRhaW5zKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJqZWN0XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnkoc3ViamVjdCkge1xuXHRcdGNvbnN0IHBvbWlzZXMgPSBbXTtcblxuXHRcdGxldCBpID0gMDtcblx0XHRjb25zdCBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRwb21pc2VzLnB1c2godGhpcy5vYnNlcnZlcnNbaV0udXBkYXRlKHN1YmplY3QpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocG9taXNlcyk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFByb3h5T2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBXaXRoIHRoZSBQcm94eU9ic2VydmVyIHlvdSBjYW4gYXR0YWNoIG9ic2VydmVyIGZvciBvYnNlcnZhdGlvbi5cbiAqIFdpdGggZWFjaCBjaGFuZ2UgYXQgdGhlIG9iamVjdCB0byBiZSBvYnNlcnZlZCBhbiB1cGRhdGUgdGFrZXMgcGxhY2UuXG4gKlxuICogVGhpcyBhbHNvIGFwcGxpZXMgdG8gbmVzdGVkIG9iamVjdHMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIFByb3h5T2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnJlYWxTdWJqZWN0ID0gdmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblx0XHR0aGlzLnN1YmplY3QgPSBuZXcgUHJveHkob2JqZWN0LCBnZXRIYW5kbGVyLmNhbGwodGhpcykpO1xuXG5cdFx0dGhpcy5vYmplY3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuXHRcdHRoaXMub2JqZWN0TWFwLnNldCh0aGlzLnJlYWxTdWJqZWN0LCB0aGlzLnN1YmplY3QpO1xuXG5cdFx0dGhpcy5wcm94eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5wcm94eU1hcC5zZXQodGhpcy5zdWJqZWN0LCB0aGlzLnJlYWxTdWJqZWN0KTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzID0gbmV3IE9ic2VydmVyTGlzdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcHJveHktb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Qcm94eU9ic2VydmVyfVxuXHQgKi9cblx0c2V0U3ViamVjdChvYmopIHtcblx0XHRsZXQgaTtcblx0XHRjb25zdCBrID0gT2JqZWN0LmtleXModGhpcy5zdWJqZWN0KTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZGVsZXRlIHRoaXMuc3ViamVjdFtrW2ldXTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YmplY3QgPSBleHRlbmQodGhpcy5zdWJqZWN0LCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQ2hhbmdlcyB0byB0aGlzIG9iamVjdCBhcmUgbm90IG5vdGljZWQgYnkgdGhlIG9ic2VydmVycywgc28geW91IGNhbiBtYWtlIGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgYW5kIGluZm9ybSB0aGUgb2JzZXJ2ZXJzIGxhdGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0UmVhbFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbFN1YmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnlPYnNlcnZlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm5zIHt7ZGVmaW5lUHJvcGVydHk6IChmdW5jdGlvbigqPSwgKj0sICo9KTogKiksIHNldFByb3RvdHlwZU9mOiAoZnVuY3Rpb24oKiwgKj0pOiBib29sZWFuKSwgc2V0OiAoZnVuY3Rpb24oKiwgKiwgKiwgKik6IGJvb2xlYW4pLCBnZXQ6ICgoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICh1bmRlZmluZWQpKXwqKSwgZGVsZXRlUHJvcGVydHk6ICgoZnVuY3Rpb24oKiwgKik6IChib29sZWFuKSl8Kil9fVxuICogQHByaXZhdGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tLy0vc25pcHBldHMvNDl9XG4gKi9cbmZ1bmN0aW9uIGdldEhhbmRsZXIoKSB7XG5cdGNvbnN0IHByb3h5ID0gdGhpcztcblxuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuXHRjb25zdCBoYW5kbGVyID0ge1xuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWdldC1wLXJlY2VpdmVyXG5cdFx0Z2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCB2YWx1ZSBhcyBwcm94eSBpZiBvYmplY3Qgb3IgYXJyYXlcblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHByb3h5Lm9iamVjdE1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3h5Lm9iamVjdE1hcC5nZXQodmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3h5LnByb3h5TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IG5ldyBQcm94eSh2YWx1ZSwgaGFuZGxlcik7XG5cdFx0XHRcdFx0cHJveHkub2JqZWN0TWFwLnNldCh2YWx1ZSwgcCk7XG5cdFx0XHRcdFx0cHJveHkucHJveHlNYXAuc2V0KHAsIHZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLXNldC1wLXYtcmVjZWl2ZXJcblx0XHRzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSB7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHByb3h5LnByb3h5TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModGFyZ2V0KSkge1xuXHRcdFx0XHR0YXJnZXQgPSBwcm94eS5wcm94eU1hcC5nZXQodGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGN1cnJlbnQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyhjdXJyZW50KSkge1xuXHRcdFx0XHRjdXJyZW50ID0gcHJveHkucHJveHlNYXAuZ2V0KGN1cnJlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRsZXQgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcblxuXHRcdFx0aWYgKGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZXNjcmlwdG9yID0ge1xuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRkZXNjcmlwdG9yW1widmFsdWVcIl0gPSB2YWx1ZTtcblx0XHRcdHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVsZXRlLXBcblx0XHRkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG5cdFx0XHRpZiAoa2V5IGluIHRhcmdldCkge1xuXHRcdFx0XHRkZWxldGUgdGFyZ2V0W2tleV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWZpbmVvd25wcm9wZXJ0eS1wLWRlc2Ncblx0XHRkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0cHJvdG90eXBlb2YtdlxuXHRcdHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0MSwga2V5KTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaGFuZGxlcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEEgdGhlbWUgY2xhc3NcbiAqL1xuY2xhc3MgVGhlbWUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBuYW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihuYW1lKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXROYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgdGhlbWluZyB1c2VkIGluIHRoZSBkb2N1bWVudCBjYW4gYmUgZGVmaW5lZCB2aWEgdGhlIGh0bWwtdGFnLlxuICogVGhlIHRoZW1pbmcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZWAuXG4gKlxuICogQXMgbmFtZSBmb3IgYSB0aGVtZSBhbGwgY2hhcmFjdGVycyBhcmUgdmFsaWQsIHdoaWNoIGFyZSBhbHNvIGFsbG93ZWQgZm9yIGEgSFRNTEVsZW1lbnQtSUQuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiB0aGUgZGVmYXVsdCB0aGVtZSBuYW1lIGlzIGBtb25zdGVyYC5cbiAqXG4gKiBAcmV0dXJuIHtUaGVtZX1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiwgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50VGhlbWUgfSBmcm9tIFwiLi90aGVtZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRlbXBsYXRlIH07XG5cbi8qKlxuICogVGhlIHRlbXBsYXRlIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGNyZWF0aW5nIHRlbXBsYXRlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjbGFzc1xuICovXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UodGVtcGxhdGUsIEhUTUxUZW1wbGF0ZUVsZW1lbnQpO1xuXHRcdHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS90ZW1wbGF0ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGVtcGxhdGUgaWQgbm90IGZvdW5kLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREb2N1bWVudFRlbXBsYXRlKGlkLCBjdXJyZW50Tm9kZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhpZCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0Y29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTFRlbXBsYXRlRWxlbWVudFwiKTtcblx0Y29uc3QgRG9jdW1lbnRGcmFnbWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRGcmFnbWVudFwiKTtcblx0Y29uc3QgRG9jdW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50XCIpO1xuXG5cdGxldCBwcmVmaXhJRDtcblxuXHRpZiAoXG5cdFx0IShcblx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0KVxuXHQpIHtcblx0XHRpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRpZiAoY3VycmVudE5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgpKSB7XG5cdFx0XHRcdHByZWZpeElEID0gY3VycmVudE5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmdldFJvb3ROb2RlKCk7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0IShcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8XG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0IShcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdGN1cnJlbnROb2RlID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHRlbXBsYXRlO1xuXHRjb25zdCB0aGVtZSA9IGdldERvY3VtZW50VGhlbWUoKTtcblxuXHRpZiAocHJlZml4SUQpIHtcblx0XHRjb25zdCB0aGVtZWRQcmVmaXhJRCA9IGAke3ByZWZpeElEfS0ke2lkfS0ke3RoZW1lLmdldE5hbWUoKX1gO1xuXG5cdFx0Ly8gY3VycmVudCArIHRoZW1lZFByZWZpeElEXG5cdFx0dGVtcGxhdGUgPSBjdXJyZW50Tm9kZS5nZXRFbGVtZW50QnlJZCh0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gZG9jdW1lbnQgKyB0aGVtZWRQcmVmaXhJRFxuXHRcdHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhlbWVkUHJlZml4SUQpO1xuXHRcdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHRoZW1lZElEID0gYCR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0Ly8gY3VycmVudCArIHRoZW1lZElEXG5cdHRlbXBsYXRlID0gY3VycmVudE5vZGUuZ2V0RWxlbWVudEJ5SWQodGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHQvLyBkb2N1bWVudCArIHRoZW1lZElEXG5cdHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHQvLyBjdXJyZW50ICsgSURcblx0dGVtcGxhdGUgPSBjdXJyZW50Tm9kZS5nZXRFbGVtZW50QnlJZChpZCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdC8vIGRvY3VtZW50ICsgSURcblx0dGVtcGxhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihgdGVtcGxhdGUgJHtpZH0gbm90IGZvdW5kLmApO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuXG5leHBvcnQgeyBkaWZmIH07XG5cbi8qKlxuICogV2l0aCB0aGUgZGlmZiBmdW5jdGlvbiB5b3UgY2FuIHBlcmZvcm0gdGhlIGNoYW5nZSBvZiBvbmUgb2JqZWN0IHRvIGFub3RoZXIuIFRoZSByZXN1bHQgc2hvd3MgdGhlIGNoYW5nZXMgb2YgdGhlIHNlY29uZCBvYmplY3QgdG8gdGhlIGZpcnN0IG9iamVjdC5cbiAqXG4gKiBUaGUgb3BlcmF0b3IgYGFkZGAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHNlY29uZCBvYmplY3QuIGBkZWxldGVgIG1lYW5zIHRoYXQgc29tZXRoaW5nIGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCBjb21wYXJlZCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RpZmYubWpzXG4gKiBAcGFyYW0geyp9IGZpcnN0XG4gKiBAcGFyYW0geyp9IHNlY29uZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqL1xuZnVuY3Rpb24gZGlmZihmaXJzdCwgc2Vjb25kKSB7XG5cdHJldHVybiBkb0RpZmYoZmlyc3QsIHNlY29uZCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge1NldDxzdHJpbmc+fFNldDxudW1iZXI+fVxuICovXG5mdW5jdGlvbiBnZXRLZXlzKGEsIGIsIHR5cGUpIHtcblx0aWYgKGlzQXJyYXkodHlwZSkpIHtcblx0XHRjb25zdCBrZXlzID1cblx0XHRcdGEubGVuZ3RoID4gYi5sZW5ndGggPyBuZXcgQXJyYXkoYS5sZW5ndGgpIDogbmV3IEFycmF5KGIubGVuZ3RoKTtcblx0XHRrZXlzLmZpbGwoMCk7XG5cdFx0cmV0dXJuIG5ldyBTZXQoa2V5cy5tYXAoKF8sIGkpID0+IGkpKTtcblx0fVxuXG5cdHJldHVybiBuZXcgU2V0KE9iamVjdC5rZXlzKGEpLmNvbmNhdChPYmplY3Qua2V5cyhiKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gZGlmZlxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGRvRGlmZihhLCBiLCBwYXRoLCBkaWZmKSB7XG5cdGNvbnN0IHR5cGVBID0gdHlwZU9mKGEpO1xuXHRjb25zdCB0eXBlQiA9IHR5cGVPZihiKTtcblxuXHRjb25zdCBjdXJyUGF0aCA9IHBhdGggfHwgW107XG5cdGNvbnN0IGN1cnJEaWZmID0gZGlmZiB8fCBbXTtcblxuXHRpZiAodHlwZUEgPT09IHR5cGVCICYmICh0eXBlQSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlQSA9PT0gXCJhcnJheVwiKSkge1xuXHRcdGdldEtleXMoYSwgYiwgdHlwZUEpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIHYpKSB7XG5cdFx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYVt2XSwgYlt2XSwgXCJhZGRcIiwgY3VyclBhdGguY29uY2F0KHYpKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImRlbGV0ZVwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvRGlmZihhW3ZdLCBiW3ZdLCBjdXJyUGF0aC5jb25jYXQodiksIGN1cnJEaWZmKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvID0gZ2V0T3BlcmF0b3IoYSwgYiwgdHlwZUEsIHR5cGVCKTtcblx0XHRpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGEsIGIsIG8sIHBhdGgpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VyckRpZmY7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3JcbiAqIEBwYXJhbSB7YXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge3twYXRoOiBhcnJheSwgb3BlcmF0b3I6IHN0cmluZ319XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFJlc3VsdChhLCBiLCBvcGVyYXRvciwgcGF0aCkge1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3BlcmF0b3IsXG5cdFx0cGF0aCxcblx0fTtcblxuXHRpZiAob3BlcmF0b3IgIT09IFwiYWRkXCIpIHtcblx0XHRyZXN1bHQuZmlyc3QgPSB7XG5cdFx0XHR2YWx1ZTogYSxcblx0XHRcdHR5cGU6IHR5cGVvZiBhLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYSkpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuZmlyc3QuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvcGVyYXRvciA9PT0gXCJhZGRcIiB8fCBvcGVyYXRvciA9PT0gXCJ1cGRhdGVcIikge1xuXHRcdHJlc3VsdC5zZWNvbmQgPSB7XG5cdFx0XHR2YWx1ZTogYixcblx0XHRcdHR5cGU6IHR5cGVvZiBiLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYikpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYik/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuc2Vjb25kLmluc3RhbmNlID0gbmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOb3RFcXVhbChhLCBiKSB7XG5cdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBhLmdldFRpbWUoKSAhPT0gYi5nZXRUaW1lKCk7XG5cdH1cblxuXHRyZXR1cm4gYSAhPT0gYjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKGEsIGIpIHtcblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0bGV0IG9wZXJhdG9yO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUEgPSB0eXBlb2YgYTtcblxuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdGNvbnN0IHR5cGVCID0gdHlwZW9mIGI7XG5cblx0aWYgKHR5cGVBID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImFkZFwiO1xuXHR9IGVsc2UgaWYgKHR5cGVBICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImRlbGV0ZVwiO1xuXHR9IGVsc2UgaWYgKGlzTm90RXF1YWwoYSwgYikpIHtcblx0XHRvcGVyYXRvciA9IFwidXBkYXRlXCI7XG5cdH1cblxuXHRyZXR1cm4gb3BlcmF0b3I7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEBzaW5jZSAzLjU1LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNsZWVwKG1pbGxpc2Vjb25kcykge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGZpcmVFdmVudCwgZmlyZUN1c3RvbUV2ZW50LCBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9O1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzZW5kcyBhbiBldmVudFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAodHlwZSA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRlbGVtZW50LmNsaWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L0V2ZW50XG5cdFx0Y29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodmFsaWRhdGVTdHJpbmcodHlwZSksIHtcblx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRcdFx0Y29tcG9zZWQ6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGUsIHR5cGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5ET00uZmlyZUN1c3RvbUV2ZW50KClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IGRldGFpbFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwYXRoIGBFdmVudC5jb21wb3NlZFBhdGgoKWAgZnJvbSBhbiBldmVudCBhbmQgdHJpZXMgdG8gZmluZCB0aGUgbmV4dCBlbGVtZW50XG4gKiB1cCB0aGUgdHJlZSBgZWxlbWVudC5jbG9zZXN0KClgIHdpdGggdGhlIGF0dHJpYnV0ZSBhbmQgdmFsdWUuIElmIG5vIHZhbHVlLCBvciBhIHZhbHVlIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGF0dHJpYnV0ZVZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gXCIuLi9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vZGF0YS9waXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfQklORCxcblx0QVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcsIGlzSW5zdGFuY2UsIGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBTbGVlcCB9IGZyb20gXCIuLi91dGlsL3NsZWVwLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVXBkYXRlciwgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfTtcblxuLyoqXG4gKiBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tLiBJbiB0aGlzIHdheSwgc3RydWN0dXJlcyBhbmQgY29udGVudHMgaW4gdGhlIERPTSBjYW4gYmVcbiAqIHByb2dyYW1tYXRpY2FsbHkgYWRhcHRlZCB2aWEgYXR0cmlidXRlcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdG8gaW5jbHVkZSBhIHN0cmluZyBmcm9tIGFuIG9iamVjdCwgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlcGxhY2VgIGNhbiBiZSB1c2VkLlxuICogYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGNhbiBiZSBmb3VuZCB1bmRlciBbbW9uc3RlcmpzLm9yZ10oaHR0cHM6Ly9tb25zdGVyanMub3JnLylcbiAqXG4gKiBDaGFuZ2VzIHRvIGF0dHJpYnV0ZXMgYXJlIG1hZGUgb25seSB3aGVuIHRoZSBkaXJlY3QgdmFsdWVzIGFyZSBjaGFuZ2VkLiBJZiB5b3Ugd2FudCB0byBhc3NpZ24gY2hhbmdlc1xuICogdG8gb3RoZXIgdmFsdWVzIGFzIHdlbGwsIHlvdSBoYXZlIHRvIGluc2VydCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0LXRoaXNgLiBUaGlzIHNob3VsZCBiZVxuICogZG9uZSB3aXRoIGNhcmUsIGFzIGl0IGNhbiByZWR1Y2UgcGVyZm9ybWFuY2UuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS91cGRhdGVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIGRvbVxuICovXG5jbGFzcyBVcGRhdGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdHxQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gc3ViamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuXHQgKiBAc2VlIHtAbGluayBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZX1cblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN1YmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGlmIChzdWJqZWN0ID09PSB1bmRlZmluZWQpIHN1YmplY3QgPSB7fTtcblx0XHRpZiAoIWlzSW5zdGFuY2Uoc3ViamVjdCwgUHJveHlPYnNlcnZlcikpIHtcblx0XHRcdHN1YmplY3QgPSBuZXcgUHJveHlPYnNlcnZlcihzdWJqZWN0KTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGVsZW1lbnQ6IHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLFxuXHRcdFx0bGFzdDoge30sXG5cdFx0XHRjYWxsYmFja3M6IG5ldyBNYXAoKSxcblx0XHRcdGV2ZW50VHlwZXM6IFtcImtleXVwXCIsIFwiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkcm9wXCIsIFwidG91Y2hlbmRcIiwgXCJpbnB1dFwiXSxcblx0XHRcdHN1YmplY3Q6IHN1YmplY3QsXG5cdFx0fTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQoXG5cdFx0XHRcImNoZWNrc3RhdGVcIixcblx0XHRcdGdldENoZWNrU3RhdGVDYWxsYmFjay5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRcdFx0XHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZih0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0LCBzKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IGNsb25lKHMpO1xuXG5cdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGRpZmZSZXN1bHQpKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFNsZWVwKDEpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0aW5zZXJ0RWxlbWVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0czogJ2tleXVwJywgJ2NsaWNrJywgJ2NoYW5nZScsICdkcm9wJywgJ3RvdWNoZW5kJ1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9FdmVudHN9XG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcGFyYW0ge0FycmF5fSB0eXBlc1xuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKi9cblx0c2V0RXZlbnRUeXBlcyh0eXBlcykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMgPSB2YWxpZGF0ZUFycmF5KHR5cGVzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kLCB0aGUgZXZlbnRsaXN0ZW5lcnMgYXJlIGhvb2tlZCBpbiBhbmQgdGhlIG1hZ2ljIGJlZ2lucy5cblx0ICpcblx0ICogYGBgXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHN1bW1hcnkgTGV0IHRoZSBtYWdpYyBiZWdpblxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKCkge1xuXHRcdC8vIHRoZSBrZXkgX19pbml0X19oYXMgbm8gZnVydGhlciBtZWFuaW5nIGFuZCBpcyBvbmx5XG5cdFx0Ly8gdXNlZCB0byBjcmVhdGUgdGhlIGRpZmYgZm9yIGVtcHR5IG9iamVjdHMuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IHsgX19pbml0X186IHRydWUgfTtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5ub3RpZnlPYnNlcnZlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYm91bmQgZWxlbWVudHMgYW5kIGNoYW5nZXMgdGhlbSBpbiBzdWJqZWN0XG5cdCAqXG5cdCAqIEBzaW5jZSAxLjI3LjBcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uVXBkYXRlcn1cblx0ICovXG5cdHJldHJpZXZlKCkge1xuXHRcdHJldHJpZXZlRnJvbUJpbmRpbmdzLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSWYgeW91IGhhdmUgcGFzc2VkIGEgUHJveHlPYnNlcnZlciBpbiB0aGUgY29uc3RydWN0b3IsIHlvdSB3aWxsIGdldCB0aGUgb2JqZWN0IHRoYXQgdGhlIFByb3h5T2JzZXJ2ZXIgbWFuYWdlcyBoZXJlLlxuXHQgKiBIb3dldmVyLCBpZiB5b3UgcGFzc2VkIGEgc2ltcGxlIG9iamVjdCwgaGVyZSB5b3Ugd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhhdCBvYmplY3QuXG5cdCAqXG5cdCAqIEZvciBjaGFuZ2VzIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQobmFtZSwgY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAcmV0dXJuIHtmdW5jdGlvblxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBnZXRDaGVja1N0YXRlQ2FsbGJhY2soKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoY3VycmVudCkge1xuXHRcdC8vIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0ICh0aGVyZWZvcmUgbm8gYXJyYXkgZnVuY3Rpb24gaGVyZSlcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGAke3RoaXMudmFsdWV9YCA9PT0gYCR7Y3VycmVudH1gID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQpIHtcblx0XHRcdGlmIChpc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL3VwZGF0ZXJAQEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAdGhpcyBVcGRhdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xFdmVudEhhbmRsZXIoKSB7XG5cdGlmICh0aGlzW3N5bWJvbF0pIHtcblx0XHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGguXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbc3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cblx0XHRpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdH0sIDApO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlQW5kU2V0VmFsdWUoZWxlbWVudCkge1xuXHRjb25zdCBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCkpO1xuXG5cdGxldCBwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cdGlmIChwYXRoID09PSBudWxsKVxuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblxuXHRpZiAocGF0aC5pbmRleE9mKFwicGF0aDpcIikgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cdH1cblxuXHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoNSk7IC8vIHJlbW92ZSBwYXRoOiBmcm9tIHRoZSBzdHJpbmdcblxuXHRsZXQgdmFsdWU7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuXHRcdFx0XHRsZXQgb3B0aW9ucyA9IGVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucztcblx0XHRcdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlIG9wdGlvbjpjaGVja2VkXCIpO1xuXHRcdFx0XHR2YWx1ZSA9IEFycmF5LmZyb20ob3B0aW9ucykubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyB2YWx1ZXMgZnJvbSBjdXN0b20gZWxlbWVudHNcblx0fSBlbHNlIGlmIChcblx0XHQoZWxlbWVudD8uY29uc3RydWN0b3I/LnByb3RvdHlwZSAmJlxuXHRcdFx0ISFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRlbGVtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XCJ2YWx1ZVwiLFxuXHRcdFx0KT8uW1wiZ2V0XCJdKSB8fFxuXHRcdGVsZW1lbnQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKVxuXHQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQ/LltcInZhbHVlXCJdO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIG9iamVjdFwiKTtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRjb25zdCB0eXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFKTtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJpbnRcIjpcblx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0Y2FzZSBcImludGVnZXJcIjpcblx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdGNhc2UgXCJib29sXCI6XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiMVwiIHx8IHZhbHVlID09PSBcIm9uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFycmF5XCI6XG5cdFx0XHRjYXNlIFwibGlzdFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRjYXNlIFwianNvblwiOlxuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvcHkgPSBjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybjtcblxuXHRcdHdoaWxlIChwLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwLmpvaW4oXCIuXCIpO1xuXG5cdFx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlR9Kj1cInBhdGg6JHtjdXJyZW50fVwiXWA7XG5cblx0XHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgWywgY29udGFpbmVyRWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRcdGlmIChtZW0uaGFzKGNvbnRhaW5lckVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRcdFx0bWVtLmFkZChjb250YWluZXJFbGVtZW50KTtcblxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlZiA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IGtleSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IHJlZlByZWZpeCA9IGAke2tleX0tYDtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHQvLyB0aGlzIGNhc2UgaXMgYWN0dWFsbHkgZXhjbHVkZWQgYnkgdGhlIHF1ZXJ5IGJ1dCBpcyBuZXZlcnRoZWxlc3MgY2hlY2tlZCBhZ2FpbiBoZXJlXG5cdFx0XHRcdGlmIChjbWQuaW5kZXhPZihcInxcIikgPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGF0YVBhdGggPSBjbWQuc3BsaXQoXCI6XCIpLnBvcCgpO1xuXG5cdFx0XHRcdGxldCBpbnNlcnRQb2ludDtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSBjb250YWluZXJFbGVtZW50Lmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgW2ksIG9ial0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVmID0gcmVmUHJlZml4ICsgaTtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGF0aCA9IGAke2RhdGFQYXRofS4ke2l9YDtcblxuXHRcdFx0XHRcdGF2YWlsYWJsZS5hZGQocmVmKTtcblx0XHRcdFx0XHRjb25zdCByZWZFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9PVwiJHtyZWZ9XCJdYCxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlZkVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSByZWZFbGVtZW50O1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXJFbGVtZW50LCBrZXksIHJlZiwgY3VycmVudFBhdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9Kj1cIiR7cmVmUHJlZml4fVwiXWAsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2RlcykpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhYXZhaWxhYmxlLmhhcyhcblx0XHRcdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSksXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0XHRcdGAke2NvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cC5wb3AoKTtcblx0XHR9XG5cblx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSBicmVhaztcblx0XHRpZiAod2QrKyA+IDIwMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICovXG5mdW5jdGlvbiBhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lciwga2V5LCByZWYsIHBhdGgpIHtcblx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShrZXksIGNvbnRhaW5lcik7XG5cblx0Y29uc3Qgbm9kZXMgPSB0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMuY2hpbGROb2RlcykpIHtcblx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSwgcmVmKTtcblx0XHR9XG5cblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKSB7XG5cdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSkpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5jaGlsZE5vZGVzKSkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUoY2hpbGQsIGtleSwgcGF0aCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRpZiAoc2xvdHMubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3QuYXNzaWduZWROb2RlcygpKSkge1xuXHRcdFx0XHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQ29udGVudChjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCBzdGF0aWMgZGF0YSBpcyBhbHdheXMgY2hhbmdlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVhY3QgdG8gY2hhbmdlcyBoZXJlLlxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwiaTE4bjpcIl1gO1xuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgJHtxdWVyeX1gKTtcblxuXHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cblx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0d2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5hcHBlbmRDaGlsZCh2YWx1ZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgJHtlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUF0dHJpYnV0ZXMoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJU31dWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31dLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfSo9XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cImkxOG46XCJdYDtcblxuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHR9XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHQvLyB0aGlzIGNhc2Ugb2NjdXJzIHdoZW4gdGhlIEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTIGF0dHJpYnV0ZSBpcyBzZXRcblx0XHRcdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblxuXHRcdFx0Zm9yIChsZXQgWywgZGVmXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzLnNwbGl0KFwiLFwiKSkpIHtcblx0XHRcdFx0ZGVmID0gdHJpbVNwYWNlcyhkZWYpO1xuXHRcdFx0XHRjb25zdCBpID0gZGVmLmluZGV4T2YoXCIgXCIpO1xuXHRcdFx0XHRjb25zdCBuYW1lID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZiwgZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlLmNhbGwodGhpcywgZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fCp9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAodmFsdWUuaW5kZXhPZihvcHQudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0b3B0LnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3B0LnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHQvLyBPbmx5IG9uZSB2YWx1ZSBtYXkgYmUgc2VsZWN0ZWRcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0aWYgKG9wdC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyYWRpb1wiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGV4dFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlTGlzdHxIVE1MRWxlbWVudHxTZXQ8SFRNTEVsZW1lbnQ+fSBlbGVtZW50c1xuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZVtdfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gZWxlbWVudHMgaXMgbm90IGFuIGluc3RhbmNlIG9mIE5vZGVMaXN0LCBIVE1MRWxlbWVudCBvciBTZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSBzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcbiAqL1xuZnVuY3Rpb24gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQoZWxlbWVudHMsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHQpO1xuXHR9XG5cblx0aWYgKCEodHlwZW9mIHN5bWJvbCA9PT0gXCJzeW1ib2xcIikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic3ltYm9sIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXCIpO1xuXHR9XG5cblx0Y29uc3QgdXBkYXRlcnMgPSBuZXcgU2V0KCk7XG5cblx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIFNldCkge1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgZWxlbWVudHMgaXMgbm90IGEgdmFsaWQgdHlwZS4gKGFjdHVhbDogJHt0eXBlb2YgZWxlbWVudHN9KWAsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHVwZGF0ZXJDYWxsYmFja3MgPSBbXTtcblx0Y29uc3QgY2IgPSB0aGlzPy5bdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF07XG5cdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjYWxsYmFja3MgPSBjYi5jYWxsKHRoaXMpO1xuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2tzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR1cGRhdGVyQ2FsbGJhY2tzLnB1c2goW25hbWUsIGNhbGxiYWNrXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzOiAke25hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrcyBkbyBub3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uc2AsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB1ID0gbmV3IFVwZGF0ZXIoZWxlbWVudCwgb2JqZWN0KTtcblx0XHR1cGRhdGVycy5hZGQodSk7XG5cblx0XHRpZiAodXBkYXRlckNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgdXBkYXRlckNhbGxiYWNrcykge1xuXHRcdFx0XHR1LnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXN1bHQucHVzaChcblx0XHRcdHUucnVuKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fSk7XG5cblx0aWYgKHVwZGF0ZXJzLnNpemUgPiAwKSB7XG5cdFx0YWRkVG9PYmplY3RMaW5rKHRoaXMsIHN5bWJvbCwgdXBkYXRlcnMpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMsIGdldFNsb3R0ZWROb2RlcyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkTm9kZXMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZE5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWRFbGVtZW50cyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHsgZXh0cmFjdEtleXMgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUga2V5cyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYW5kIHJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5UHJlZml4XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5U2VwYXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVTZXBhcmF0b3JcbiAqIEByZXR1cm5zIHtNYXA8YW55LCBhbnk+fVxuICovXG5mdW5jdGlvbiBleHRyYWN0S2V5cyhcblx0b2JqLFxuXHRrZXlQcmVmaXggPSBcIlwiLFxuXHRrZXlTZXBhcmF0b3IgPSBcIi1cIixcblx0dmFsdWVTZXBhcmF0b3IgPSBcIi5cIixcbikge1xuXHRjb25zdCByZXN1bHRNYXAgPSBuZXcgTWFwKCk7XG5cblx0ZnVuY3Rpb24gaGVscGVyKGN1cnJlbnRPYmosIGN1cnJlbnRLZXlQcmVmaXgsIGN1cnJlbnRWYWx1ZVByZWZpeCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0Y3VycmVudE9ialtrZXldICE9PSBudWxsICYmXG5cdFx0XHRcdHR5cGVvZiBjdXJyZW50T2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0IUFycmF5LmlzQXJyYXkoY3VycmVudE9ialtrZXldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0tleVByZWZpeCA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlUHJlZml4ID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRoZWxwZXIoY3VycmVudE9ialtrZXldLCBuZXdLZXlQcmVmaXgsIG5ld1ZhbHVlUHJlZml4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpbmFsS2V5ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgZmluYWxWYWx1ZSA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0cmVzdWx0TWFwLnNldChmaW5hbEtleSwgZmluYWxWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGVscGVyKG9iaiwga2V5UHJlZml4LCBrZXlQcmVmaXgpO1xuXHRyZXR1cm4gcmVzdWx0TWFwO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKiB7XG4gKiAgICAnZm9vJzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tZm9vPVwiZm9vXCI+PC9kaXY+XG4gKiAgICAnYmFyLmJheic6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJheicgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyLmJheicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJhej1cImZvb1wiPjwvZGl2PlxuICogfVxuICpcbiAqIEBzaW5jZSAzLjM4LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKFxuXHRlbGVtZW50LFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0aWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHRcdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHRcdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0XHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdFx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiZcblx0XHRcdFx0aXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvcHRpb25WYWx1ZSA9IGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBvcHRpb25WYWx1ZTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4uL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9O1xuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuNDUuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgb2JqZWN0IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMge09iamVjdH0gLSBUaGUgaW5pdGlhbGl6ZWQgb3B0aW9ucyBvYmplY3QuXG4gKiBAdGhpcyBIVE1MRWxlbWVudCAtIFRoZSBjb250ZXh0IG9mIHRoZSBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0ZWxlbWVudCxcblx0bmFtZSxcblx0b3B0aW9ucyxcblx0bWFwcGluZyA9IHt9LFxuXHRwcmVmaXggPSBcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIsXG4pIHtcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH1cblxuXHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0aWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiYgaXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKSkge1xuXHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdH1cblxuXHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHR9XG5cblx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZU9iamVjdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHsgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfSBmcm9tIFwiLi91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMgfSBmcm9tIFwiLi9zbG90dGVkLm1qc1wiO1xuaW1wb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9IGZyb20gXCIuL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59O1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhc3NlbWJsZU1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhc3NlbWJsZU1ldGhvZFN5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiB0aGlzIHN5bWJvbCBob2xkcyB0aGUgYXR0cmlidXRlIG9ic2VydmVyIGNhbGxiYWNrcy4gVGhlIGtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogSFRNTEVsZW1lbnRcbiAqIEBleHRlcm5hbCBIVE1MRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnRcbiAqXG4gKiBAc3RhcnR1bWwgY3VzdG9tZWxlbWVudC1zZXF1ZW5jZWRpYWdyYW0ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKlxuICogYXV0b251bWJlclxuICpcbiAqIFNjcmlwdCAtPiBET006IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdteS1lbGVtZW50JylcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50OiBjb25zdHJ1Y3RvcigpXG4gKiBDdXN0b21FbGVtZW50IC0+IEN1c3RvbUVsZW1lbnQ6IFtpbml0TWV0aG9kU3ltYm9sXSgpXG4gKlxuICogQ3VzdG9tRWxlbWVudCAtLT4gRE9NOiBFbGVtZW50XG4gKiBET00gLS0+IFNjcmlwdCA6IGVsZW1lbnRcbiAqXG4gKlxuICogU2NyaXB0IC0+IERPTTogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZChlbGVtZW50KVxuICpcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50IDogY29ubmVjdGVkQ2FsbGJhY2soKVxuICpcbiAqIG5vdGUgcmlnaHQgQ3VzdG9tRWxlbWVudDogaXMgb25seSBjYWxsZWQgYXRcXG50aGUgZmlyc3QgY29ubmVjdGlvblxuICogQ3VzdG9tRWxlbWVudCAtPiBDdXN0b21FbGVtZW50IDogW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpXG4gKlxuICogLi4uIC4uLlxuICpcbiAqIGF1dG9udW1iZXJcbiAqXG4gKiBTY3JpcHQgLT4gRE9NOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KVxuICogRE9NIC0+IEN1c3RvbUVsZW1lbnQ6IGRpc2Nvbm5lY3RlZENhbGxiYWNrKClcbiAqXG4gKlxuICogQGVuZHVtbFxuICpcbiAqIEBzdGFydHVtbCBjdXN0b21lbGVtZW50LWNsYXNzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBAZW5kdW1sXG4gKi9cblxuLyoqXG4gKiBUaGUgYEN1c3RvbUVsZW1lbnRgIGNsYXNzIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZSBhIG5ldyBIVE1MIGVsZW1lbnQgdXNpbmcgdGhlIHBvd2VyIG9mIEN1c3RvbSBFbGVtZW50cy5cbiAqXG4gKiAqKklNUE9SVEFOVDoqKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZVxuICogdG8gbWFrZSB0aGUgdGFnIGRlZmluZWQgdmlhIHRoZSBgZ2V0VGFnYCBtZXRob2Qga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAgZnVuY3Rpb24uXG4gKlxuICogIyMgSW50ZXJhY3Rpb25cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2N1c3RvbWVsZW1lbnQtc2VxdWVuY2VkaWFncmFtLnBuZ1wiPlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAZXh0ZW5kcyBleHRlcm5hbDpIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBIVE1MNSBjdXN0b20gY29udHJvbHMuXG4gKi9cbmNsYXNzIEN1c3RvbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBBIG5ldyBvYmplY3QgaXMgY3JlYXRlZC4gRmlyc3QgdGhlIGBpbml0T3B0aW9uc2AgbWV0aG9kIGlzIGNhbGxlZC4gSGVyZSB0aGVcblx0ICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqXG5cdCAqIElNUE9SVEFOVDogQ3VzdG9tQ29udHJvbHMgaW5zdGFuY2VzIGFyZSBub3QgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLCBidXQgZWl0aGVyIHZpYSBhIHRhZyBpbiB0aGUgSFRNTCBvciB2aWEgPGNvZGU+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpPC9jb2RlPi5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uLlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyh0aGlzLCBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMpKSxcblx0XHR9KTtcblx0XHR0aGlzW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0gPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZVxuXHQgKiBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXRob2QgaXMgc3RhdGljLlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEBwYXJhbSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGFkZEF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSwgY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHJlbW92ZUF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSkge1xuXHRcdGRlbGV0ZSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZGVmYXVsdHNgIHByb3BlcnR5IGRlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIGNvbnRyb2wuIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZXNlLFxuXHQgKiB5b3UgY2FuIHVzZSB2YXJpb3VzIG1ldGhvZHMsIHdoaWNoIGFyZSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0XG5cdCAqIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmdlbmRvY2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfS5cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdzpcblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2hhZG93Um9vdCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2F0dGFjaFNoYWRvdyksXG5cdCAqIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGUpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbG90IGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCkuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuIFdoZW4gcHJlc2VudCwgaXQgbWFrZXMgdGhlIGVsZW1lbnQgbm9uLW11dGFibGUsIG5vbi1mb2N1c2FibGUsIGFuZCBub24tc3VibWl0dGFibGUgd2l0aCB0aGUgZm9ybS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNoYWRvd01vZGU9b3BlbiBTcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHNoYWRvdyByb290LiBXaGVuIHNldCB0byBgb3BlbmAsIGVsZW1lbnRzIGluIHRoZSBzaGFkb3cgcm9vdCBhcmUgYWNjZXNzaWJsZSBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSB0aGUgcm9vdCwgd2hpbGUgc2V0dGluZyBpdCB0byBgY2xvc2VkYCBkZW5pZXMgYWNjZXNzIHRvIHRoZSByb290J3Mgbm9kZXMgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgaXQuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGVsZWdhdGVzRm9jdXM9dHJ1ZSBTcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb250cm9sIHdpdGggcmVzcGVjdCB0byBmb2N1c2FiaWxpdHkuIFdoZW4gc2V0IHRvIGB0cnVlYCwgaXQgbWl0aWdhdGVzIGN1c3RvbSBlbGVtZW50IGlzc3VlcyBhcm91bmQgZm9jdXNhYmlsaXR5LiBXaGVuIGEgbm9uLWZvY3VzYWJsZSBwYXJ0IG9mIHRoZSBzaGFkb3cgRE9NIGlzIGNsaWNrZWQsIHRoZSBmaXJzdCBmb2N1c2FibGUgcGFydCBpcyBnaXZlbiBmb2N1cywgYW5kIHRoZSBzaGFkb3cgaG9zdCBpcyBnaXZlbiBhbnkgYXZhaWxhYmxlIDpmb2N1cyBzdHlsaW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFNwZWNpZmllcyB0aGUgdGVtcGxhdGVzIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbj11bmRlZmluZWQgU3BlY2lmaWVzIHRoZSBtYWluIHRlbXBsYXRlIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZU1hcHBpbmcgU3BlY2lmaWVzIHRoZSBtYXBwaW5nIG9mIHRlbXBsYXRlcy5cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdHNoYWRvd01vZGU6IFwib3BlblwiLFxuXHRcdFx0ZGVsZWdhdGVzRm9jdXM6IHRydWUsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlTWFwcGluZzoge30sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBsYWJlbHMgb2YgdGhlIGVsZW1lbnQuXG5cdCAqIFRoZSBsYWJlbHMgYXJlIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuXHQgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogSWYgdGhlIHRyYW5zbGF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYWJlbCwgdGhlIGxhYmVsIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSAgQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG5cdCAqL1xuXHR1cGRhdGVJMThuKCkge1xuXHRcdGNvbnN0IHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0aWYgKCF0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIpO1xuXHRcdGlmICghKGlzT2JqZWN0KGxhYmVscykgfHwgaXNJdGVyYWJsZShsYWJlbHMpKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbGFiZWxzKSB7XG5cdFx0XHRjb25zdCBkZWYgPSBsYWJlbHNba2V5XTtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKGRlZikpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmKTtcblx0XHRcdFx0aWYgKHRleHQgIT09IGRlZikge1xuXHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9YCwgdGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KGRlZikpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBrIGluIGRlZikge1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBkZWZba107XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgaywgZCk7XG5cdFx0XHRcdFx0aWYgKCFpc1N0cmluZyh0ZXh0KSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRleHQgIT09IGQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9LiR7a31gLCB0ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0VGFnKClgIG1ldGhvZCByZXR1cm5zIHRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcndyaXR0ZW5cblx0ICogYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqXG5cdCAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBjaGVjayBvbiB0aGUgbmFtZSBvZiB0aGUgdGFnIGluIHRoaXMgY2xhc3MuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuXHQgKiB0aGUgZGV2ZWxvcGVyIHRvIGFzc2lnbiBhbiBhcHByb3ByaWF0ZSB0YWcgbmFtZS4gSWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLCB0aGVcblx0ICogYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCgpYCBtZXRob2Qgd2lsbCBpc3N1ZSBhbiBlcnJvci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIG1ldGhvZCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIlRoZSBtZXRob2QgYGdldFRhZygpYCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldENTU1N0eWxlU2hlZXQoKWAgbWV0aG9kIHJldHVybnMgYSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgQ1NTU3R5bGVTaGVldGAgY29uc3RydWN0b3IsIHRoZW4gYW4gb2JqZWN0IGNhbiBiZSBidWlsdCB1c2luZyB0aGUgcHJvdmlkZWQgZGV0b3VyLlxuXHQgKlxuXHQgKiBJZiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgdGhlbiB0aGUgc2hhZG93IHJvb3QgZG9lcyBub3QgcmVjZWl2ZSBhIHN0eWxlc2hlZXQuXG5cdCAqXG5cdCAqIEV4YW1wbGUgdXNhZ2U6XG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHQgKiAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHQgKiAgICAgc2hlZXQucmVwbGFjZVN5bmMoXCJwIHsgY29sb3I6IHJlZDsgfVwiKTtcblx0ICogICAgIHJldHVybiBzaGVldDtcblx0ICogfVxuXHQgKiBgYGBcblx0ICpcblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3Rvcixcblx0ICogeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIHRvIGNyZWF0ZSB0aGUgc3R5bGVzaGVldDpcblx0ICpcblx0ICogYGBganNcblx0ICogY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd0aXRsZScpO1xuXHQgKiBsZXQgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHQgKiBzdHlsZS5pbm5lckhUTUwgPSBcInAgeyBjb2xvcjogcmVkOyB9XCI7XG5cdCAqIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcblx0ICogZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHQgKiByZXR1cm4gZG9jLnN0eWxlU2hlZXRzWzBdO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldHxDU1NTdHlsZVNoZWV0W118c3RyaW5nfHVuZGVmaW5lZH0gQSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cyB0aGF0IGRlZmluZSB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0eWxlc2hlZXQgc2hvdWxkIGJlIGFwcGxpZWQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcihcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb24gYW5kIGluZm9ybSBlbGVtZW50c1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fVxuXHRcdC8vIDIwMjQtMDEtMjE6IHJlbW92ZSB0aGlzLmRlZmF1bHRzLCBvdGhlcndpc2UgaXQgd2lsbCBvdmVyd3JpdGVcblx0XHQvLyB0aGUgY3VycmVudCBzZXR0aW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUuXG5cdFx0Ly8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTM2XG5cdFx0ZXh0ZW5kKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSXMgY2FsbGVkIG9uY2UgdmlhIHRoZSBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgZXF1aXBwZWQgd2l0aCB1cGRhdGUgZm9yIHRoZSBkeW5hbWljIGNoYW5nZSBvZiB0aGUgZG9tLlxuXHQgKiBUaGUgZnVuY3Rpb25zIHJldHVybmVkIGhlcmUgY2FuIGJlIHVzZWQgYXMgcGlwZSBmdW5jdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgZGVmaW5lZC4gSW4gdGhlIHRlbXBsYXRlIHlvdSBjYW4gdXNlIGl0IGFzIGZvbGxvd3M6XG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG15LWVsZW1lbnQgZGF0YS1tb25zdGVyLW9wdGlvbi10cmFuc2Zvcm1lcj1cInBhdGg6bXktdmFsdWUgfCBjYWxsOm15LXRyYW5zZm9ybWVyXCI+PC9teS1lbGVtZW50PlxuXHQgKiBgYGBcblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHQgKiAgICByZXR1cm4ge1xuXHQgKiAgICAgICBcIm15LXRyYW5zZm9ybWVyXCI6ICh2YWx1ZSkgPT4ge1xuXHQgKiAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgV2VydCkge1xuXHQgKiAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIFwiIVwiO1xuXHQgKiAgICAgICAgICAgY2FzZSBcIlphaGxcIjpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuXHQgKiAgICAgICAgICAgZGVmYXVsdDpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAqICAgICAgICAgICB9XG5cdCAqICAgIH1cblx0ICogICAgfTtcblx0ICogIH07XG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICogQHNpbmNlIDIuNDMuMFxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICogMS4gRXh0cmFjdHMgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBhbmQgdGhlIHNjcmlwdCB0YWcgb2YgdGhlIGVsZW1lbnQgYW5kIHNldHMgdGhlbS5cblx0ICogMi4gSW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuXG5cdCAqIDMuIEluaXRpYWxpemVzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuXG5cdCAqIDQuIEluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHMuXG5cdCAqIDUuIEF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fSAtIFRoZSB1cGRhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0bGV0IGVsZW1lbnRzO1xuXHRcdGxldCBub2RlTGlzdDtcblxuXHRcdC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGVtXG5cdFx0Y29uc3QgQXR0cmlidXRlT3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHRoaXMpO1xuXHRcdGlmIChcblx0XHRcdGlzT2JqZWN0KEF0dHJpYnV0ZU9wdGlvbnMpICYmXG5cdFx0XHRPYmplY3Qua2V5cyhBdHRyaWJ1dGVPcHRpb25zKS5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoQXR0cmlidXRlT3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gc2NyaXB0IHRhZyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBTY3JpcHRPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbCh0aGlzKTtcblx0XHRpZiAoaXNPYmplY3QoU2NyaXB0T3B0aW9ucykgJiYgT2JqZWN0LmtleXMoU2NyaXB0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKFNjcmlwdE9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXRcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIGZhbHNlKSAhPT0gZmFsc2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRTaGFkb3dSb290LmNhbGwodGhpcyk7XG5cdFx0XHRcdGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LmNoaWxkTm9kZXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRDU1NTdHlsZXNoZWV0LmNhbGwodGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGVsZW1lbnRzIGFyZSBub3QgZm91bmQgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCwgaW5pdGlhbGl6ZSB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50XG5cdFx0aWYgKCEoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcblx0XHRcdGluaXRIdG1sQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLmNoaWxkTm9kZXM7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzXG5cdFx0aW5pdEZyb21DYWxsYmFja0hvc3QuY2FsbCh0aGlzKTtcblx0XHR0cnkge1xuXHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFsuLi5lbGVtZW50cywgLi4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyldKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdH1cblxuXHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSA9IGNsb25lKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0KTtcblxuXHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0bm9kZUxpc3QsXG5cdFx0XHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdFx0XHR0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdC8vIEF0dGFjaCBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuXHRcdGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZz8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBhZHZhbmNlZCB1c2Vycy5cblx0ICogVGhlIHJlc3VsdCBpcyBhIGNsb25lIG9mIHRoZSBpbnRlcm5hbCBkYXRhLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdGdldEludGVybmFsVXBkYXRlQ2xvbmVEYXRhKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKiBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBpZiBub3QsIGNhbGxzIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG5cdFx0aWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG5cdFx0XHR0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIGNsZWFuIHVwIGNvZGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRhZG9wdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQsIG9yIHJlcGxhY2VkLiBBbHNvIGNhbGxlZCBmb3IgaW5pdGlhbFxuXHQgKiB2YWx1ZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciwgb3IgdXBncmFkZWQuIE5vdGU6IG9ubHkgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG9ic2VydmVkQXR0cmlidXRlc1xuXHQgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbFxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XG5cdFx0aWYgKGF0dHJOYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiKSkge1xuXHRcdFx0c2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0YXR0ck5hbWUsXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0/LlthdHRyTmFtZV07XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG5ld1ZhbCwgb2xkVmFsKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEBzaW5jZSAxLjE5LjBcblx0ICovXG5cdGhhc05vZGUobm9kZSkge1xuXHRcdGlmIChjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcywgdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuXHRcdHJldHVybiBjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgbmFtZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuXHRpZiAoIWlzU3RyaW5nKGNhbGxCYWNrRnVuY3Rpb25OYW1lKSB8fCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiB0aGlzKSB7XG5cdFx0cmV0dXJuIHRoaXNbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHR9XG5cblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcblx0XHRpZiAoIXRhcmdldElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcblx0XHRmb3IgKGNvbnN0IGlkIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHModGhpcywgdGFyZ2V0SWQpO1xuXHRcdFx0aWYgKCEoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGhvc3RbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdHRoaXMsXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcblx0KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZVxuICogYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIGFuZCBpZiBub3QsIHRoZSBkZWZhdWx0IGNhbGxiYWNrXG4gKiBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2AgaXMgY2FsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoaXNcbiAqIGVsZW1lbnQgYW5kIGluIHRoZSBob3N0IGVsZW1lbnQuIElmIHRoZSBjYWxsYmFjayBpcyBmb3VuZCwgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS9kZWZpbmUjcHJvdmlkaW5nX2FfY29uc3RydWN0aW9uX2NhbGxiYWNrXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdEZyb21DYWxsYmFja0hvc3QoKSB7XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG5cdC8vIElmIHRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgdXNlIGl0cyB2YWx1ZSBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spKSB7XG5cdFx0Y2FsbEJhY2tGdW5jdGlvbk5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyk7XG5cdH1cblxuXHQvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuXHRjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgY2FsbEJhY2tGdW5jdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IGNyZWF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChcblx0XHRtdXRhdGlvbnMsXG5cdFx0b2JzZXJ2ZXIsXG5cdCkge1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcblx0XHRcdFx0c2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG5cdFx0XHRcdFx0bXV0YXRpb24uYXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRtdXRhdGlvbi5vbGRWYWx1ZSxcblx0XHRcdFx0XHRtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0dHJ5IHtcblx0XHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoc2VsZiwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0fVxufVxuXG4vKipcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5DaGlsZE5vZGUobm9kZSkge1xuXHRpZiAodGhpcy5jb250YWlucyhub2RlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKGUuY29udGFpbnMobm9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaXNhYmxlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBmbGFnID0gc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKTtcblxuXHRcdFx0aWYgKGZsYWcgPT09IGxhc3REaXNhYmxlZFZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERpc2FibGVkVmFsdWUgPSBmbGFnO1xuXG5cdFx0XHRpZiAoIShzZWxmLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID1cblx0XHRcdFx0XCJidXR0b24sIGNvbW1hbmQsIGZpZWxkc2V0LCBrZXlnZW4sIG9wdGdyb3VwLCBvcHRpb24sIHNlbGVjdCwgdGV4dGFyZWEsIGlucHV0LCBbZGF0YS1tb25zdGVyLW9iamVjdGxpbmtdXCI7XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IHNlbGYuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0bGV0IG5vZGVMaXN0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFtcblx0XHRcdFx0XHQuLi5lbGVtZW50cyxcblx0XHRcdFx0XHQuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgWy4uLm5vZGVMaXN0XSkge1xuXHRcdFx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCwgXCJcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIG5vdCBpbml0aWFsaXNlZFxuXHRcdFx0aWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5mb3JtIGV2ZXJ5IGVsZW1lbnRcblx0XHRcdGNvbnN0IHVwZGF0ZXJzID0gZ2V0TGlua2VkT2JqZWN0cyhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpc3Qgb2YgdXBkYXRlcnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVyIG9mIGxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gY2xvbmUoc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0Ly8gZGlzYWJsZWRcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcoKSB7XG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpLFxuXHQpO1xuXHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdFx0XHQpfSkgYnV0IG5vdCBmb3VuZC5gLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0bGV0IG9iaiA9IHt9O1xuXG5cdHRyeSB7XG5cdFx0b2JqID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG5vZGUudGV4dENvbnRlbnQudHJpbSgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgd2hlbiBhbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2NyaXB0IHRhZyB0aGVyZSB3YXMgYW4gZXJyb3IuICR7ZX1gLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcygpIHtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgJHtBVFRSSUJVVEVfT1BUSU9OU30gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TLFxuXHRcdFx0XHQpfSkuJHtlfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIEpTT04gZGF0YSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIEpTT04gZGF0YSB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEpTT04gZGF0YSBpcyBub3QgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEh0bWxDb250ZW50fVxuICovXG5mdW5jdGlvbiBpbml0SHRtbENvbnRlbnQoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRsZXQgaHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKGlzU3RyaW5nKGh0bWwpICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0XHRcdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdFx0XHRodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nLCB7fSkuZm9ybWF0KGh0bWwpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE2LjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIGluaXRDU1NTdHlsZXNoZWV0KCkge1xuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVTaGVldCA9IHRoaXMuY29uc3RydWN0b3IuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXG5cdGlmIChzdHlsZVNoZWV0IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGlmIChzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBbc3R5bGVTaGVldF07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQXJyYXkoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCBhc3NpZ24gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHMgb2Ygc3R5bGVTaGVldCkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKHMpKSB7XG5cdFx0XHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzLnRyaW0oKTtcblx0XHRcdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdFx0XHRzdHlsZS5pbm5lckhUTUwgPSB0cmltZWRTdHlsZVNoZWV0O1xuXHRcdFx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVJbnN0YW5jZShzLCBDU1NTdHlsZVNoZWV0KTtcblxuXHRcdFx0aWYgKHMuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhc3NpZ24ucHVzaChzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYXNzaWduLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBhc3NpZ247XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQudHJpbSgpO1xuXHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gaHRtbCBpcyBub3Qgc2V0LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3dcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdFNoYWRvd1Jvb3QoKSB7XG5cdGxldCB0ZW1wbGF0ZTtcblx0bGV0IGh0bWw7XG5cblx0dHJ5IHtcblx0XHR0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKCFpc1N0cmluZyhodG1sKSB8fCBodG1sID09PSB1bmRlZmluZWQgfHwgaHRtbCA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaHRtbCBpcyBub3Qgc2V0LlwiKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmF0dGFjaFNoYWRvdyh7XG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIFwib3BlblwiKSxcblx0XHRkZWxlZ2F0ZXNGb2N1czogdGhpcy5nZXRPcHRpb24oXCJkZWxlZ2F0ZXNGb2N1c1wiLCB0cnVlKSxcblx0fSk7XG5cblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpIHtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdGh0bWwgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcpLmZvcm1hdChodG1sKTtcblx0fVxuXG5cdHRoaXMuc2hhZG93Um9vdC5pbm5lckhUTUwgPSBodG1sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXcgZWxlbWVudC4gVGhlIHN0cmluZyByZXR1cm5lZCBieSBgQ3VzdG9tRWxlbWVudC5nZXRUYWcoKWAgaXMgdXNlZCBhcyB0aGUgdGFnLlxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtET01FeGNlcHRpb259IEZhaWxlZCB0byBleGVjdXRlICdkZWZpbmUnIG9uICdDdXN0b21FbGVtZW50UmVnaXN0cnknOiBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChlbGVtZW50KSB7XG5cdHZhbGlkYXRlRnVuY3Rpb24oZWxlbWVudCk7XG5cdGNvbnN0IGN1c3RvbUVsZW1lbnRzID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3VzdG9tRWxlbWVudHNcIik7XG5cdGlmIChjdXN0b21FbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY3VzdG9tRWxlbWVudHMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdH1cblxuXHRjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcblx0aWYgKCFpc1N0cmluZyh0YWcpIHx8IHRhZyA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcblx0fVxuXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQodGFnKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyByYW5kb20gfTtcblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIHVzZXMgY3J5cHQgYW5kIHJldHVybnMgYSByYW5kb20gbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDApXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IGVuZCB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMTAwMDAwMDAwMClcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5NYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG5cdGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdG1pbiA9IDA7XG5cdH1cblx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWF4ID0gTUFYO1xuXHR9XG5cblx0aWYgKG1heCA8IG1pbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5cIik7XG5cdH1cblxuXHRyZXR1cm4gTWF0aC5yb3VuZChjcmVhdGUobWluLCBtYXgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgTUFYID0gMTAwMDAwMDAwMDtcblxuTWF0aC5sb2cyID1cblx0TWF0aC5sb2cyIHx8XG5cdGZ1bmN0aW9uIChuKSB7XG5cdFx0cmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG5cdH07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKG1pbiwgbWF4KSB7XG5cdGxldCBjcnlwdDtcblx0Y29uc3QgZ2xvYmFsUmVmZXJlbmNlID0gZ2V0R2xvYmFsKCk7XG5cblx0Y3J5cHQgPVxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJtc0NyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0dW5kZWZpbmVkO1xuXG5cdGlmICh0eXBlb2YgY3J5cHQgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGNyeXB0XCIpO1xuXHR9XG5cblx0bGV0IHJ2YWwgPSAwO1xuXHRjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcblx0aWYgKHJhbmdlIDwgMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cIik7XG5cdH1cblxuXHRjb25zdCBiaXRzTmVlZGVkID0gTWF0aC5jZWlsKE1hdGgubG9nMihyYW5nZSkpO1xuXHRpZiAoYml0c05lZWRlZCA+IDUzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwid2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cIik7XG5cdH1cblx0Y29uc3QgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwoYml0c05lZWRlZCAvIDgpO1xuXHRjb25zdCBtYXNrID0gTWF0aC5wb3coMiwgYml0c05lZWRlZCkgLSAxO1xuXG5cdGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzTmVlZGVkKTtcblx0Y3J5cHQuZ2V0UmFuZG9tVmFsdWVzKGJ5dGVBcnJheSk7XG5cblx0bGV0IHAgPSAoYnl0ZXNOZWVkZWQgLSAxKSAqIDg7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuXHRcdHJ2YWwgKz0gYnl0ZUFycmF5W2ldICogTWF0aC5wb3coMiwgcCk7XG5cdFx0cCAtPSA4O1xuXHR9XG5cblx0cnZhbCA9IHJ2YWwgJiBtYXNrO1xuXG5cdGlmIChydmFsID49IHJhbmdlKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZShtaW4sIG1heCk7XG5cdH1cblxuXHRpZiAocnZhbCA8IG1pbikge1xuXHRcdHJ2YWwgKz0gbWluO1xuXHR9XG5cblx0cmV0dXJuIHJ2YWw7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZGVhZCBtYW4ncyBzd2l0Y2ggYWxsb3dzIHRvIHNldCBhIHRpbWVyIHdoaWNoIGNhbiBiZSByZXNldCBhZ2FpbiBhbmQgYWdhaW4gd2l0aGluIGEgZGVmaW5lZCBwZXJpb2Qgb2YgdGltZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI5LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgRGVhZE1hbnNTd2l0Y2ggZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgZGVhZCBtYW4ncyBzd2l0Y2hcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfSBkZWxheVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWxheSwgY2FsbGJhY2spIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW5pdC5jYWxsKHRoaXMsIHZhbGlkYXRlSW50ZWdlcihkZWxheSksIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ8dW5kZWZpbmVkfSBbZGVsYXldXG5cdCAqL1xuXHR0b3VjaChkZWxheSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0ludGVnZXIoZGVsYXkpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdID0gZGVsYXk7XG5cdFx0fSBlbHNlIGlmIChkZWxheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhcmd1bWVudFwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cblx0XHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENhbGxiYWNrKCkge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPSB0cnVlO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tcIl0oKTtcblx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZGVsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGluaXQoZGVsYXksIGNhbGxiYWNrKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdGNhbGxiYWNrLFxuXHRcdGRlbGF5LFxuXHRcdGlzQWxyZWFkeVJ1bjogZmFsc2UsXG5cdFx0dGltZXI6IHVuZGVmaW5lZCxcblx0fTtcblxuXHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQcm9jZXNzaW5nIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2FsbGJhY2sge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGNhbGxiYWNrOiB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSxcblx0XHRcdHRpbWU6IHZhbGlkYXRlSW50ZWdlcih0aW1lID8/IDApLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtICB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Z2V0R2xvYmFsRnVuY3Rpb24oXCJzZXRUaW1lb3V0XCIpKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrKGRhdGEpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0udGltZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0byBleGVjdXRlIHNldmVyYWwgZnVuY3Rpb25zIGluIG9yZGVyLlxuICpcbiAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG4gKiBJbiB0aGUgZXhhbXBsZVxuICpcbiAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcbiAqXG4gKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuICpcbiAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuICpcbiAqIFRoZSByZXN1bHQgb2YgYHJ1bigpYCBpcyBhIHByb21pc2UuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3V0aWwvcHJvY2Vzc2luZy5tanNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIxLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgUHJvY2Vzc2luZyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBQcm9jZXNzaW5nXG5cdCAqXG5cdCAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG5cdCAqIEluIHRoZSBleGFtcGxlXG5cdCAqXG5cdCAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcblx0ICpcblx0ICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cblx0ICpcblx0ICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG5cdCAqXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7Li4uKGludHxmdW5jdGlvbil9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRxdWV1ZTogbmV3IFF1ZXVlKCksXG5cdFx0fTtcblxuXHRcdGxldCB0aW1lID0gMDtcblxuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGFyZ10gb2YgT2JqZWN0LmVudHJpZXMoYXJncykpIHtcblx0XHRcdGlmIChpc0ludGVnZXIoYXJnKSAmJiBhcmcgPj0gMCkge1xuXHRcdFx0XHR0aW1lID0gYXJnO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhhcmcsIHRpbWUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFx0XCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBmdW5jdGlvbiB3aXRoIHRoZSBkZXNpcmVkIHRpbWVvdXRcblx0ICogSWYgbm8gdGltZW91dCBpcyBzcGVjaWZpZWQsIHRoZSB0aW1lb3V0IG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB1c2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRhZGQoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGNhbGxiYWNrLCB0aW1lKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGluIG9yZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLnBvbGwoKTtcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWxsYmFjay5ydW4oZGF0YSkudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW4ocmVzdWx0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci11cmxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhlIGNvbnRyb2wuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1VSTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dXJsYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlbG9hZGAgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVsb2FkLlxuICpcbiAqIHZhbGlkIHZhbHVlczogb25zaG93XG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9SRUxPQUQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbG9hZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS45LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WSVNJQklMSVRZID0gYCR7QVRUUklCVVRFX1BSRUZJWH12aXNpYmlsaXR5YDtcbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS45LjBcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMzIuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWNsYXNzYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOVEVORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW50ZW5kYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbmBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0hBU19DSElMRFJFTiA9IGAke0FUVFJJQlVURV9QUkVGSVh9aGFzLWNoaWxkcmVuYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2VgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBkYXRhc291cmNlLlxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtYXJndW1lbnRzYCBjYW4gYmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2UtYXJndW1lbnRzYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7XG5cdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcblx0QVRUUklCVVRFX0ZPUk1fVVJMLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcblx0QVRUUklCVVRFX0lOVEVORCxcblx0QVRUUklCVVRFX1ZJU0lCSUxJVFksXG5cdEFUVFJJQlVURV9GT1JNX1JFTE9BRCxcblx0QVRUUklCVVRFX0hBU19DSElMRFJFTixcblx0QVRUUklCVVRFX0JVVFRPTl9DTEFTUyxcbn07XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7VGFic1N0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUYWJzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFRhYnNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHRhYnMgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjFweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7cGFkZGluZzoxLjFlbTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9W2RhdGEtcG9wcGVyLWFycm93XSxbZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtiYWNrZ3JvdW5kOmluaGVyaXQ7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKX1bZGF0YS1wb3BwZXItYXJyb3dde3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcXCJcXFwiO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3Zpc2liaWxpdHk6dmlzaWJsZX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd117Ym90dG9tOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnRyYW5zcGFyZW50fWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XXt0b3A6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd117cmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XXtsZWZ0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dHJhbnNwYXJlbnR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Omhvc3R7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbi5oaWRkZW57ZGlzcGxheTpub25lfW5hdltkYXRhLW1vbnN0ZXItcm9sZT1uYXZde2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpO2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDttYXJnaW4tYm90dG9tOi43NXJlbTtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIC5yZW1vdmUtdGFiey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjE2cHg7bWluLWhlaWdodDoxNnB4O29yZGVyOjI7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gc3BhbntkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDt3aGl0ZS1zcGFjZTpwcmV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9ue2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvdXRsaW5lOm5vbmU7cGFkZGluZzouMzc1cmVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuOHM7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIsW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF17YWxpZ24tc2VsZjpjZW50ZXI7Ym9yZGVyOjA7b3JkZXI6Mjt0b3VjaC1hY3Rpb246bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS13aWR0aDowfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBpbWd7aGVpZ2h0OjEuM3JlbTttYXJnaW4tbGVmdDouNHJlbTt3aWR0aDoxLjNyZW19OjpzbG90dGVkKDpub3QoW3Nsb3RdKTpub3QoLmFjdGl2ZSkpe2Rpc3BsYXk6bm9uZX06OnNsb3R0ZWQoKil7YWxpZ24tc2VsZjpjZW50ZXJ9OjpzbG90dGVkKFtzbG90XSl7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9OjpzbG90dGVkKFtzbG90PXN0YXJ0XSl7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvcmRlcjowfTo6c2xvdHRlZChbc2xvdD1lbmRdKXttYXJnaW4tbGVmdDouNzVyZW07b3JkZXI6M31bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKXtib3JkZXI6MDtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOmhvdmVyLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyOjB9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5mdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gZmlsdGVyIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQW5kQXNzaWduQ29udGVudChlbGVtZW50LCB1cmwsIG9wdGlvbnMsIGZpbHRlcikge1xuXHRyZXR1cm4gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdGxldCBjb250ZW50ID0gcmVzcG9uc2UuY29udGVudDtcblxuXHRcdGlmIChpc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlciAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGMuaW5uZXJIVE1MID0gY29udGVudDtcblx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgYy5xdWVyeVNlbGVjdG9yQWxsKGZpbHRlcikuZW50cmllcygpKSB7XG5cdFx0XHRcdHQuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRlbnQgPSB0LmlubmVySFRNTDtcblx0XHR9XG5cblx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cblx0XHRjb25zdCBzY3JpcHRzID0gdC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuXHRcdGZvciAoY29uc3QgWywgc2NyaXB0XSBvZiBzY3JpcHRzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cdFx0XHRzLmlubmVySFRNTCA9IHNjcmlwdC5pbm5lckhUTUw7XG5cdFx0XHRpZiAoc2NyaXB0LnNyYykgcy5zcmMgPSBzY3JpcHQuc3JjO1xuXHRcdFx0aWYgKHNjcmlwdC50eXBlKSBzLnR5cGUgPSBzY3JpcHQudHlwZTtcblx0XHRcdGlmIChzY3JpcHQuYXN5bmMpIHMuYXN5bmMgPSBzY3JpcHQuYXN5bmM7XG5cdFx0XHRpZiAoc2NyaXB0LmRlZmVyKSBzLmRlZmVyID0gc2NyaXB0LmRlZmVyO1xuXHRcdFx0aWYgKHNjcmlwdC5jcm9zc09yaWdpbikgcy5jcm9zc09yaWdpbiA9IHNjcmlwdC5jcm9zc09yaWdpbjtcblx0XHRcdGlmIChzY3JpcHQuaW50ZWdyaXR5KSBzLmludGVncml0eSA9IHNjcmlwdC5pbnRlZ3JpdHk7XG5cdFx0XHRpZiAoc2NyaXB0LnJlZmVycmVyUG9saWN5KSBzLnJlZmVycmVyUG9saWN5ID0gc2NyaXB0LnJlZmVycmVyUG9saWN5O1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcblx0XHRcdHQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPSB0LmlubmVySFRNTDtcblxuXHRcdGNvbnN0IHJvb3QgPSBmaW5kU2hhZG93Um9vdChlbGVtZW50KTtcblx0XHRpZiAocm9vdCAhPT0gbnVsbCkge1xuXHRcdFx0ZWxlbWVudCA9IHJvb3QuaG9zdDtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQoZWxlbWVudCwgXCJtb25zdGVyLWZldGNoZWRcIiwge1xuXHRcdFx0dXJsLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gZmV0Y2godmFsaWRhdGVTdHJpbmcodXJsKSwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHQvLyBUaGUgb2sgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRoZSBSZXNwb25zZSBpbnRlcmZhY2UgY29udGFpbnMgYVxuXHRcdC8vIEJvb2xlYW4gc3RhdGluZyB3aGV0aGVyIHRoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bCAoc3RhdHVzIGluIHRoZSByYW5nZSAyMDAtMjk5KSBvciBub3QuXG5cdFx0aWYgKHJlc3BvbnNlPy5vayAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzcG9uc2UvdHlwZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRbXCJlcnJvclwiLCBcIm9wYXF1ZVwiLCBcIm9wYXF1ZXJlZGlyZWN0XCJdLmluZGV4T2YocmVzcG9uc2U/LnR5cGUpICE9PSAtMVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IGAke3Jlc3BvbnNlPy5zdGF0dXN9YC5zdWJzdHJpbmcoMCwgMSk7XG5cdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgXCI0XCI6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjbGllbnQgZXJyb3IgJHtyZXNwb25zZT8uc3RhdHVzVGV4dH1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRgdW5kZWZpbmVkIHN0YXR1cyAoJHtyZXNwb25zZT8uc3RhdHVzfSAvICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9KSBvciB0eXBlICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdC50ZXh0KClcblx0XHRcdFx0LnRoZW4oKGNvbnRlbnQpID0+IHtcblx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdFx0XHR0eXBlOiByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCwgbG9hZENvbnRlbnQgfTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtUaGVtZVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUaGVtZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBUaGVtZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgdGhlbWUgeyBcbi5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycywgcG9wcGVySW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVySW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJJbnN0YW5jZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMge0N1c3RvbUVsZW1lbnR9XG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1vZGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMobW9kZSkge1xuXHRjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCB0aGlzLmdldE9wdGlvbihcInBvcHBlclwiKSk7XG5cdGNvbnN0IG1vZGlmaWVycyA9IG9wdGlvbnM/LltcIm1vZGlmaWVyc1wiXTtcblxuXHRpZiAoIWlzQXJyYXkobW9kaWZpZXJzKSkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0gPSBbXTtcblx0fVxuXG5cdGlmIChcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLmZpbHRlcigoZW50cnkpID0+IHtcblx0XHRcdGlmIChlbnRyeT8uW1wibmFtZVwiXSA9PT0gXCJldmVudExpc3RlbmVyc1wiKSB7XG5cdFx0XHRcdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRcdFx0XHRlbnRyeVtcImVuYWJsZWRcIl0gPSB2YWxpZGF0ZUJvb2xlYW4obW9kZSk7XG5cdFx0XHR9XG5cdFx0fSkubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0ucHVzaCh7XG5cdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRlbmFibGVkOiB2YWxpZGF0ZUJvb2xlYW4obW9kZSksXG5cdFx0fSk7XG5cdH1cblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS5zZXRPcHRpb25zKG9wdGlvbnMpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCJAcG9wcGVyanMvY29yZVwiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi8uLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBUYWJzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdGFicy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mZXRjaC5tanNcIjtcbmltcG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3RoZW1lLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi4vZm9ybS91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHRhYiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy90YWJzLnBuZ1wiPlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXRhYnMgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGFicycpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXRhYnM+PC9tb25zdGVyLXRhYnM+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtUYWJzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGFicycpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q3JlYXRlIGEgc2ltcGxlIHRhYiBjb250cm9sPC9jYXB0aW9uPlxuICogPG1vbnN0ZXItdGFicz5cbiAqICAgICA8ZGl2IGlkPVwidGFiMVwiPlRhYiAxPC9kaXY+XG4gKiAgICAgPGRpdiBpZD1cInRhYjJcIj5UYWIgMjwvZGl2PlxuICogPC9tb25zdGVyLXRhYnM+XG4gKlxuICogQHN0YXJ0dW1sIHRhYnMucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBUYWJzXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0XG4gKiBAc3VtbWFyeSBBIGNvbmZpZ3VyYWJsZSB0YWIgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItdGFiLWNoYW5nZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItdGFiLXJlbW92ZVxuICovXG5jbGFzcyBUYWJzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3RhYnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5ldy10YWItbGFiZWw9XCJOZXcgVGFiXCJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9Ym90dG9tIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBtb2RpZmllcnM9e25hbWU6b2Zmc2V0fSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRcIm5ldy10YWItbGFiZWxcIjogXCJOZXcgVGFiXCIsXG5cdFx0XHR9LFxuXHRcdFx0YnV0dG9uczoge1xuXHRcdFx0XHRzdGFuZGFyZDogW10sXG5cdFx0XHRcdHBvcHBlcjogW10sXG5cdFx0XHR9LFxuXHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRwb3BwZXI6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdH0sXG5cblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwib2Zmc2V0XCIsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdG9mZnNldDogWzAsIDJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0gPSBuZXcgUGF0aGZpbmRlcih7IGRhdGE6IHt9IH0pO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gc2V0dXAgc3RydWN0dXJlXG5cdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRcdGluaXRQb3BwZXJTd2l0Y2guY2FsbCh0aGlzKTtcblx0XHRcdGluaXRQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbVGFic1N0eWxlU2hlZXQsIFRoZW1lU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgYWN0aXZhdGVzIGEgdGFiIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBuYW1lLlxuXHQgKiBcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHt0eXBlfSBpZE9yTmFtZSAtIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSB0YWIgdG8gYWN0aXZhdGVcblx0ICogQHJldHVybiB7VGFic30gLSBUaGUgY3VycmVudCBpbnN0YW5jZVxuXHQgKi9cblx0YWN0aXZlVGFiKGlkT3JOYW1lKSB7XG5cdFx0XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XG5cdFx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKGZvdW5kID09PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gKS5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWApLmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdFxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5hbWUgb3IgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiLlxuXHQgKiBcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICogXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldEFjdGl2ZVRhYigpIHtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKTtcblx0XHRcdFx0fSBcblx0XHRcdFx0XG5cdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyU3dpdGNoKCkge1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzd2l0Y2hcIl1gKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cdGxldCBzd2l0Y2hCdXR0b247XG5cdGlmIChub2Rlcy5zaXplID09PSAwKSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKFwicGFydFwiLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHRjb25zdCBjbGFzc0xpc3QgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIpO1xuXHRcdGlmIChjbGFzc0xpc3QpIHtcblx0XHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKGNsYXNzTGlzdCk7XG5cdFx0fVxuXHRcdHN3aXRjaEJ1dHRvbi5pbm5lckhUTUwgPVxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk05LjUgMTNhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwelwiLz48L3N2Zz4nO1xuXHRcdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucHJlcGVuZChzd2l0Y2hCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IG5vZGVzLm5leHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHRzd2l0Y2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHN3aXRjaEJ1dHRvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlUG9wcGVyKCkge1xuXHRpZiAoIXRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93UG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIHRydWUpO1xuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0fSlcblx0XHQucnVuKHVuZGVmaW5lZClcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvd1BvcHBlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tuYXZFbGVtZW50U3ltYm9sXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHRuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0pLm9ic2VydmUodGhpcywge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEBleHRlcm5hbCBcImV4dGVybmFsOmNyZWF0ZVBvcHBlclwiXG4gKiBAc2VlIHtAbGluayAgUGx1Z2luc31cbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgc2VsZi5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXG5cdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdID0gY3JlYXRlUG9wcGVyKFxuXHRcdHNlbGZbc3dpdGNoRWxlbWVudFN5bWJvbF0sXG5cdFx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHRvcHRpb25zLFxuXHQpO1xuXG5cdGNvbnN0IG9ic2VydmVyMSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRsZXQgcnVuVXBkYXRlID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyMS5vYnNlcnZlKHNlbGZbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHJlZmVyZW5jZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWApO1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGNvbnN0IGlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuXHRcdGlmIChpZCA9PT0gcmVmZXJlbmNlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRcdC8vIGdldCBhbGwgZGF0YS0gZnJvbSBidXR0b24gYW5kIGZpbHRlciBvdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXMgYW5kIGRhdGEtbW9uc3Rlci1pbnNlcnRcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGNvbnN0IG1hc2sgPSBbXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXNcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1zdGF0ZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1yb2xlXCIsXG5cdFx0XHRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IFssIGF0dHJdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuYXR0cmlidXRlcykpIHtcblx0XHRcdFx0aWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKFwiZGF0YS1cIikgJiYgbWFzay5pbmRleE9mKGF0dHIubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0ZGF0YVthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhbm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSB8fFxuXHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvbnNob3dcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGxvYWRBbmRBc3NpZ25Db250ZW50KG5vZGUsIHVybCwgb3B0aW9ucywgZmlsdGVyKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBzdGFuZGFyZEJ1dHRvbnMpIHtcblx0XHRjb25zdCBidXR0b24gPSBzdGFuZGFyZEJ1dHRvbnNbaW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnN0YW5kYXJkLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0Y29uc3QgcG9wcGVyQnV0dG9uID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBwb3BwZXJCdXR0b24pIHtcblx0XHRjb25zdCBidXR0b24gPSBwb3BwZXJCdXR0b25baW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnBvcHBlci4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBldmVudDptb25zdGVyLXRhYi1yZW1vdmVcblx0ICogQGV2ZW50IE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuZXZlbnQ6bW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkxheW91dC5ldmVudDptb25zdGVyLXRhYi1yZW1vdmVcblx0ICovXG5cdHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS10YWJcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgYnV0dG9uID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XCJidXR0b25cIixcblx0XHRcdCk7XG5cblx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgcmVmZXJlbmNlID0gYnV0dG9uLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2VgLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWQ9JHtyZWZlcmVuY2V9XWApO1xuXHRcdFx0XHRcdGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLXJlbW92ZVwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYnNlcnZlZE5vZGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlZE5vZGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKGhhc09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIGNvbnN0cnVjdCBtb25pdG9ycyBhIG5vZGUgd2hldGhlciBpdCBpcyBkaXNhYmxlZCBvciBtb2RpZmllZFxuXHQgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn1cblx0ICovXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGlmIChpc0FycmF5KG11dGF0aW9ucykpIHtcblx0XHRcdGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zLnBvcCgpO1xuXHRcdFx0aWYgKG11dGF0aW9uIGluc3RhbmNlb2YgTXV0YXRpb25SZWNvcmQpIHtcblx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbChzZWxmKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyLm9ic2VydmUob2JzZXJ2ZWROb2RlLCB7XG5cdFx0Y2hpbGRMaXN0OiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdHN1YnRyZWU6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZUZpbHRlcjogW1xuXHRcdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdF0sXG5cdH0pO1xuXG5cdGFkZFRvT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wsIG9ic2VydmVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YG5hdlske0FUVFJJQlVURV9ST0xFfT1uYXZdYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlci1uYXZdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKlxuICovXG5mdW5jdGlvbiBpbml0VGFiQnV0dG9ucygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGFjdGl2ZVJlZmVyZW5jZTtcblxuXHRjb25zdCBkaW1lbnNpb25zQ2FsY3VsYXRlZCA9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFxuXHRcdFwiZGF0YS5jYWxjdWxhdGVkXCIsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IFtdO1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgbnVsbCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdGxldCBsYWJlbCA9IGdldEJ1dHRvbkxhYmVsLmNhbGwodGhpcywgbm9kZSk7XG5cblx0XHRsZXQgcmVmZXJlbmNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImlkXCIpKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZDtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB8fCBub2RlLmRpc2FibGVkID09PSB0cnVlKSB7XG5cdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZWZlcmVuY2UpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5ldyBJRChcInRhYlwiKS50b1N0cmluZygpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCByZWZlcmVuY2UpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCkpIHtcblx0XHRcdGxhYmVsID0gYDxzcGFuIHBhcnQ9XCJsYWJlbFwiPiR7bGFiZWx9PC9zcGFuPjxpbWcgcGFydD1cImljb25cIiBzcmM9XCIke25vZGUuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRcdCl9XCI+YDtcblx0XHR9XG5cblx0XHRsZXQgcmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZhYmxlYCkpIHtcblx0XHRcdHJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUgJiYgZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdGFjdGl2ZVJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRjb25zdCBzdGF0ZSA9IFwiXCI7XG5cdFx0Y29uc3QgY2xhc3NlcyA9IGRpbWVuc2lvbnNDYWxjdWxhdGVkID8gXCJcIiA6IFwiaW52aXNpYmxlXCI7XG5cblx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGNsYXNzOiBjbGFzc2VzLFxuXHRcdFx0ZGlzYWJsZWQsXG5cdFx0XHRyZW1vdmUsXG5cdFx0fSk7XG5cblx0XHRhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcywgbm9kZSk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIFtdKTtcblx0dGhpcy5zZXRPcHRpb24oXCJtYXJrZXJcIiwgcmFuZG9tKCkpO1xuXG5cdHJldHVybiBhZGp1c3RCdXR0b25WaXNpYmlsaXR5LmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0XHRjb25zdCBkZWZDb3VudCA9IHNlbGYuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5sZW5ndGg7XG5cdFx0XHRjb25zdCBkb21Db3VudCA9IHNlbGZbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2J1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXScsXG5cdFx0XHQpLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW4gZHJhd2luZ1xuXHRcdFx0aWYgKGRlZkNvdW50ICE9PSBkb21Db3VudCkgcmV0dXJuO1xuXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cblx0XHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbbmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gW107XG5cdGNvbnN0IHBvcHBlckJ1dHRvbnMgPSBbXTtcblxuXHRsZXQgc3VtID0gMDtcblx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cblx0XHRzdW0gKz0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoYGRhdGEuYnV0dG9uLiR7cmVmfWApO1xuXG5cdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRwb3BwZXJCdXR0b25zLnB1c2goY2xvbmUoYnV0dG9uKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIHBvcHBlckJ1dHRvbnMpO1xuXG5cdGlmICh0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zKCkge1xuXHRjb25zdCB3aWR0aCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cblx0bGV0IHN0YXJ0RW5kV2lkdGggPSAwO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJzdGFydFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcImVuZFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnNwYWNlXCIsIHdpZHRoIC0gc3RhcnRFbmRXaWR0aCAtIDIpO1xuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEudmlzaWJsZVwiLCAhKHdpZHRoID09PSAwKSk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5jb25jYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKSxcblx0KTtcblxuXHRmb3IgKGNvbnN0IFtpLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3Rvcihcblx0XHRcdGA6c2NvcGUgPiBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke3JlZn1cIl1gLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSkgY29udGludWU7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcblx0XHRcdGBkYXRhLmJ1dHRvbi4ke3JlZn1gLFxuXHRcdFx0Y2FsY0JveFdpZHRoLmNhbGwodGhpcywgZWxlbWVudCksXG5cdFx0KTtcblx0XHRidXR0b25bXCJjbGFzc1wiXSA9IG5ldyBUb2tlbkxpc3QoYnV0dG9uW1wiY2xhc3NcIl0pXG5cdFx0XHQucmVtb3ZlKFwiaW52aXNpYmxlXCIpXG5cdFx0XHQudG9TdHJpbmcoKTtcblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgbmF2WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPW5hdl0gPiBzbG90LmludmlzaWJsZSwgc2xvdFske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1zbG90XS5pbnZpc2libGVgLFxuXHQpO1xuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIHNsb3RzLmVudHJpZXMoKSkge1xuXHRcdHNsb3QuY2xhc3NMaXN0LnJlbW92ZShcImludmlzaWJsZVwiKTtcblx0fVxuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvbkxhYmVsKG5vZGUpIHtcblx0bGV0IGxhYmVsO1xuXHRsZXQgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IG5vZGUuaW5uZXJUZXh0O1xuXHRcdHNldExhYmVsID0gdHJ1ZTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uZXctdGFiLWxhYmVsXCIsIFwiTmV3IFRhYlwiKTtcblx0fVxuXG5cdGlmIChsYWJlbC5sZW5ndGggPiAxMDApIHtcblx0XHRsYWJlbCA9IGAke2xhYmVsLnN1YnN0cmluZygwLCA5OSl9XHUyMDI2YDtcblx0fVxuXG5cdGlmIChzZXRMYWJlbCA9PT0gdHJ1ZSkge1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwsIGxhYmVsKTtcblx0fVxuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b24sXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOmJ1dHRvbnMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIHBhdGg6YnV0dG9ucy5kaXNhYmxlZCB8IGlmOnRydWUsICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2UgcGF0aDpidXR0b25zLnJlZmVyZW5jZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpidXR0b25zLmxhYmVsXCI+PC9zcGFuPjxzcGFuIHBhcnQ9XCJyZW1vdmUtdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpidXR0b25zLnJlbW92ZSB8ID86cmVtb3ZlLXRhYjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8bmF2IGRhdGEtbW9uc3Rlci1yb2xlPVwibmF2XCIgcGFydD1cIm5hdlwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW1hcmtlciBwYXRoOm1hcmtlclwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJidXR0b25zIHBhdGg6YnV0dG9ucy5zdGFuZGFyZFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGFydFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiXG5cdFx0XHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnBvcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtcG9wcGVyLWFycm93PjwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicG9wcGVyLW5hdlwiIGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyLW5hdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnBvcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJwb3BwZXJcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGFicyk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7TWVzc2FnZVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIE1lc3NhZ2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG1lc3NhZ2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzB9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXgsW2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjhweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XXtmbGV4LWdyb3c6MjtAbWl4aW5zIHBhcmFncmFwaH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTVweDt3aWR0aDoxNnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIyLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lclN5bWJvbCA9IFN5bWJvbChcInRpbWVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VlbnRlckV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlbGVhdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9tZXNzYWdlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZT48L21vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1xuICogQHN0YXJ0dW1sIG1lc3NhZ2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBNZXNzYWdlXG4gKiBAZW5kdW1sXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5ldmVudDptb25zdGVyLXh4eHhcbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgXG5cdCAqIDxtb25zdGVyLW1lc3NhZ2UgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1tZXNzYWdlPlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIHRpbWVvdXQ6IDMwMDAsXG5cdCAqICAgICAgICBmZWF0dXJlczoge1xuXHQgKiAgICAgICAgICBjbGVhcjogdHJ1ZSxcblx0ICogICAgICAgICAgZGlzYXBwZWFyOiB0cnVlXG5cdCAqICAgICAgICB9XG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7aW50ZWdlcn0gdGltZW91dCB0aW1lIGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgcmVtb3ZlZC4gVGhlIHRpbWVvdXQgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUgZmVhdHVyZSBgZGlzYXBwZWFyYC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuY2xlYXIgc2hvdyBjbGVhciBidXR0b25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5kaXNhcHBlYXIgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHRpbWVvdXRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICpcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHJlbW92ZVNlbGYuY2FsbCh0aGlzKTtcblx0XHR9LCB0aGlzLmdldE9wdGlvbihcInRpbWVvdXRcIiwgMTAwMCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGYoKSB7XG5cdHN0b3BGYWRlb3V0KCk7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChcImZhZGVvdXRcIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpcy5yZW1vdmUoKTtcblx0fSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdG9wRmFkZW91dCgpIHtcblx0aWYgKHRoaXM/Llt0aW1lclN5bWJvbF0pIHtcblx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lclN5bWJvbF0pO1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BSRUZJWCArIFwidGltZW91dFwiKTtcblx0aWYgKGlzU3RyaW5nKHRpbWVvdXQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdG9wdGlvbnNbXCJ0aW1lb3V0XCJdID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFICsgXCIsIFwiICsgZS50b1N0cmluZygpKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01lc3NhZ2V9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9cmVtb3ZlXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlbGVhdmVcIixcblx0XHRcdFx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJyZW1vdmVcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7Tm90aWZ5U3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE5vdGlmeVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBOb3RpZnlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG5vdGlmeSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOjA7bWF4LWhlaWdodDoxMDB2SDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjI1cmVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWxlZnRde2xlZnQ6MDtyaWdodDphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXJpZ2h0XXtsZWZ0OmF1dG87cmlnaHQ6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Ym90dG9tXXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj10b3Bde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLWNvbG9yLHJnYmEoMCwwLDAsLjEpKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItcmFkaXVzLC4yNXJlbSk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItc3R5bGUsc29saWQpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXdpZHRoLDFweCk7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07bWFyZ2luOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tdG9wLDE1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tcmlnaHQsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWJvdHRvbSwwKSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWxlZnQsMCk7bWF4LWhlaWdodDoyMDBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy10b3AsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWJvdHRvbSw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWxlZnQsNXB4KTtwb2ludGVyLWV2ZW50czphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0Oy1tb3otdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2VdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV0uZmFkZW91dHtib3JkZXI6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6MDtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7dHJhbnNpdGlvbjphbGwgLjJzIGN1YmljLWJlemllcigxLC0uMDQsMCwxLjAzKX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9jb21wb25lbnQtZm9ybVxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBOb3RpZnlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi8uLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb3RpZnkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicXVldWVcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbm90aWZ5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5PjwvbW9uc3Rlci1ub3RpZnk+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBFdmVudHNcbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXG4gKiBAc3RhcnR1bWwgbm90aWZ5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTm90aWZ5XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnlcbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICovXG5jbGFzcyBOb3RpZnkgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW3F1ZXVlU3ltYm9sXSA9IG5ldyBRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbm90aWZ5PlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIG9yaWVudGF0aW9uOiAncmlnaHQgdG9wJ1xuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0b3JpZW50YXRpb246IFwibGVmdCB0b3BcIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vdGlmeX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0d2hpbGUgKHRoaXNbcXVldWVTeW1ib2xdLmlzRW1wdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5wdXNoKHRoaXNbcXVldWVTeW1ib2xdLnBvbGwoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW5vdGlmeVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTm90aWZ5U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTm90aWZ5fVxuXHQgKi9cblx0cHVzaChtZXNzYWdlKSB7XG5cdFx0bGV0IG1lc3NhZ2VFbGVtZW50ID0gbWVzc2FnZTtcblx0XHRpZiAoIShtZXNzYWdlIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdGNvbnN0IHRleHQgPSB2YWxpZGF0ZVN0cmluZyhtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIik7XG5cdFx0XHRtZXNzYWdlRWxlbWVudC5zZXRPcHRpb24oXCJjb250ZW50XCIsIHRleHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UobWVzc2FnZUVsZW1lbnQsIE1lc3NhZ2UpO1xuXHRcdG1lc3NhZ2VFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlXCIpO1xuXG5cdFx0Ly8gaWYgbm90IGNvbm5lY3RlZCwgYWRkIHRvIHF1ZXVlXG5cdFx0aWYgKCF0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR0aGlzW3F1ZXVlU3ltYm9sXS5hZGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiLCB7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCxcblx0XHR9KTtcblxuXHRcdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0uYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250YWluZXJdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE5vdGlmeSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7U3BsaXRTY3JlZW5TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3BsaXRTY3JlZW5TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgU3BsaXRTY3JlZW5TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHNwbGl0c2NyZWVuIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztoZWlnaHQ6YXV0bzttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSAucGFuZWx7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2hlaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCl9W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpO2xlZnQ6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpO3dpZHRoOjEwMCV9Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0gW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG4gICAgYXNzZW1ibGVNZXRob2RTeW1ib2wsXG4gICAgQ3VzdG9tRWxlbWVudCxcbiAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQge2ZpcmVDdXN0b21FdmVudH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1NwbGl0U2NyZWVuU3R5bGVTaGVldH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zcGxpdC1zY3JlZW4ubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtpbnRlcm5hbFN5bWJvbH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTcGxpdFNjcmVlbiwgVFlQRV9WRVJUSUNBTCwgVFlQRV9IT1JJWk9OVEFMfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3BsaXRTY3JlZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkcmFnZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRyYWdnZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGFydFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGVuZFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImVuZFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGhhbmRsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJoYW5kbGVFbGVtZW50XCIpO1xuXG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX1ZFUlRJQ0FMID0gXCJ2ZXJ0aWNhbFwiO1xuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9IT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCI7XG5cblxuLyoqXG4gKiBUaGUgVmlld2VyIGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgYSBQREYsIEhUTUwgb3IgSW1hZ2UuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9zcGxpdHNjcmVlbi5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXNwbGl0c2NyZWVuIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNwbGl0LXNjcmVlbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNwbGl0LXNjcmVlbj48L21vbnN0ZXItc3BsaXQtc2NyZWVuPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9zcGxpdC1zY3JlZW4ubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3BsaXQtc2NyZWVuJyk7XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgc3BsaXRzY3JlZW4ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gU3BsaXRTY3JlZW5cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXRcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIHNwbGl0IHNjcmVlbiBsYXlvdXRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuY2xhc3MgU3BsaXRTY3JlZW4gZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzeW1ib2x9XG4gICAgICovXG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvc3BsaXRzY3JlZW5cIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cbiAgICAgKlxuICAgICAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc3BsaXRUeXBlIFNwbGl0IHR5cGUgKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbiBEaW1lbnNpb25cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLmluaXRpYWwgSW5pdGlhbCBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5tYXggTWF4aW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWluIE1pbmltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWFpbjogZ2V0VGVtcGxhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzcGxpdFR5cGU6IFRZUEVfVkVSVElDQUwsXG4gICAgICAgICAgICBkaW1lbnNpb246IHtcbiAgICAgICAgICAgICAgICBpbml0aWFsOiBcIjYwJVwiLFxuICAgICAgICAgICAgICAgIG1heDogXCI4MCVcIixcbiAgICAgICAgICAgICAgICBtaW46IFwiMjAlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgZnVsbFN0YXJ0U2NyZWVuKCkge1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbihcIjEwMCVcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBcbiAgICBmdWxsRW5kU2NyZWVuKCkge1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbihcIjAlXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgXG4gICAgcmVzZXRTY3JlZW4oKSB7XG4gICAgICAgIHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgXG4gICAgXG5cbiAgICBzZXRDb250ZW50KGh0bWwpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJjb250ZW50XCIsIGh0bWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG4gICAgICovXG4gICAgW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcbiAgICAgICAgc3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cbiAgICAgICAgaW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG4gICAgICAgIGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgLy9hcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZGltZW5zaW9uIGlzIGEgcGVyY2VudGFnZSBhbmQgd2l0aGluIGEgdmFsaWQgcmFuZ2UsIHRoZW4gc2V0IHRoZSBkaW1lbnNpb24gb3B0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpbWVuc2lvbiAtIFRoZSBkaW1lbnNpb24gdG8gYmUgc2V0LCBjYW4gYmUgaW4gcGVyY2VudGFnZSBvciBhYnNvbHV0ZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IC0gUmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHNldERpbWVuc2lvbihkaW1lbnNpb24pIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgcGVyY2VudCBhbmQgZ3JlYXRlciB0aGFuMTAwXG4gICAgICAgIGlmIChkaW1lbnNpb24uaW5jbHVkZXMoXCIlXCIpKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA+IDEwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMDAlXCIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludChkaW1lbnNpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID0gZGltZW5zaW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgIHJldHVybiBcIm1vbnN0ZXItc3BsaXQtc2NyZWVuXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICByZXR1cm4gW1NwbGl0U2NyZWVuU3R5bGVTaGVldF07XG4gICAgfVxufVxuXG5cbi8qKlxuICogU2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBwYW5lbCBiYXNlZCBvbiB0aGUgc3BsaXQgdHlwZS5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuZnVuY3Rpb24gYXBwbHlQYW5lbERpbWVuc2lvbnMoKSB7XG5cbiAgICBjb25zdCBzcGxpdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblxuICAgIGlmIChzcGxpdFR5cGUgPT09IFRZUEVfVkVSVElDQUwpIHtcbiAgICAgICAgdGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBkaW1lbnNpb247XG4gICAgICAgIHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcbiAgICAgICAgdGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJldy1yZXNpemVcIjtcbiAgICAgICAgdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJ2ZXJ0aWNhbFwiKTtcbiAgICAgICAgdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJob3Jpem9udGFsXCIpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gZGltZW5zaW9uO1xuICAgICAgICB0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuICAgICAgICB0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcIm5zLXJlc2l6ZVwiO1xuICAgICAgICB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhvcml6b250YWxcIik7XG4gICAgICAgIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwidmVydGljYWxcIik7XG5cbiAgICB9XG5cbiAgICBmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXCIsIHtcbiAgICAgICAgY29udHJvbGxlcjogdGhpcyxcbiAgICAgICAgZGltZW5zaW9uOiBkaW1lbnNpb25cbiAgICB9KTtcbiAgICBcbn1cblxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1zY3JlZW5dXCIpO1xuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl1cIik7XG4gICAgdGhpc1toYW5kbGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV1cIik7XG5cbiAgICB0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXJ0UGFuZWxdXCIpO1xuICAgIHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPWVuZFBhbmVsXVwiKTtcblxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBsZXQgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuICAgIGxldCBsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXG4gICAgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xuICAgICAgICBzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICBsYXN0RGltZW5zaW9uID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBjdXJyZW50RGltZW5zaW9uO1xuICAgICAgICBpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG4gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUud2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKSB7XG4gICAgICAgICAgICBzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCkge1xuICAgICAgICAgICAgc2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHtcbiAgICAgICAgc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyB0aGUgNXB4IGFyZSB3cm9uZyBhbmQgbXVzdCBiZSBjYWxjIGZyb20gY3NzIHByb3BlcnR5IC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXG5cbiAgICAgICAgICAgIGxldCBkcmFnZ2VyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHNlbGZbZHJhZ2dlckVsZW1lbnRTeW1ib2xdKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcIik7XG4gICAgICAgICAgICBpZiAoZHJhZ2dlcldpZHRoID09PSBcIlwiIHx8IGRyYWdnZXJXaWR0aCA9PT0gdW5kZWZpbmVkIHx8IGRyYWdnZXJXaWR0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRyYWdnZXJXaWR0aCA9IFwiMFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfSE9SSVpPTlRBTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldFRvcCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3R0b21QYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VG9wSGVpZ2h0ID0gZS5jbGllbnRZIC0gY29udGFpbmVyT2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcbiAgICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wQXNQZXJjZW50ID0gKG5ld1RvcEhlaWdodCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQpICogMTAwO1xuICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQobWluKSA+IHRvcEFzUGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgbmV3VG9wSGVpZ2h0ID0gbWluO1xuICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCB0b3BBc1BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgIG5ld1RvcEhlaWdodCA9IG1heDtcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgIG5ld1RvcEhlaWdodCA9IHRvcEFzUGVyY2VudCArIFwiJVwiO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAvLyBjYWxjIG5ldyB0b3AgaGVpZ2h0IHRvIHBpeGVsICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvcEhlaWdodFB4ID0gKHBhcnNlSW50KG5ld1RvcEhlaWdodCkgLyAxMDApICogdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgICAgIHRvcFBhbmVsLnN0eWxlLmhlaWdodCA9IGAke25ld1RvcEhlaWdodFB4fXB4YDtcbiAgICAgICAgICAgICAgICBib3R0b21QYW5lbC5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtuZXdUb3BIZWlnaHRQeH1weCAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciBoZWlnaHRcblxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0TGVmdCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0UGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0xlZnRXaWR0aCA9IGUuY2xpZW50WCAtIGNvbnRhaW5lck9mZnNldExlZnQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdEFzUGVyY2VudCA9IChuZXdMZWZ0V2lkdGggLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0V2lkdGgpICogMTAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KG1pbikgPiBsZWZ0QXNQZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnRXaWR0aCA9IG1pbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCBsZWZ0QXNQZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnRXaWR0aCA9IG1heDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0V2lkdGggPSBsZWZ0QXNQZXJjZW50ICsgXCIlXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGVmdFBhbmVsLnN0eWxlLndpZHRoID0gYCR7bmV3TGVmdFdpZHRofWA7XG4gICAgICAgICAgICAgICAgcmlnaHRQYW5lbC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke25ld0xlZnRXaWR0aH0gLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgd2lkdGhcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJhZ0V2ZW50SGFuZGxlciA9IChlKSA9PiB7XG4gICAgICAgICAgICBzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGRyYWdFdmVudEhhbmRsZXIpO1xuXG4gICAgfSk7XG5cblxuICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuICAgICAgICBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICBsZXQgYXBwbHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGxhc3REaW1lbnNpb24gIT09IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuICAgICAgICAgICAgICAgIGFwcGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxhc3RUeXBlICE9PSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSkge1xuICAgICAgICAgICAgICAgIGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG4gICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pKTtcblxuXG4gICAgcmV0dXJuIHRoaXM7XG5cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcbiAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNwbGl0LXNjcmVlblwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhcnRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwic3RhcnRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGFydFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRyYWdnZXJcIiBwYXJ0PVwiZHJhZ2dlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJoYW5kbGVcIiBwYXJ0PVwiaGFuZGxlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJlbmRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwiZW5kUGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3BsaXRTY3JlZW4pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFJlbG9hZCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIHJlbG9hZHMgdGhlIGNvbnRlbnQgb2YgYSB1cmwgYW5kIGVtYmVkcyBpdCBpbnRvIHRoZSBkb20uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9yZWxvYWQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItcmVsb2FkIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICpcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtSZWxvYWR9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9yZWxvYWQuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQSBzaW1wbGUgY29uZmlndXJhdGlvbiBjYW4gbG9vayBsaWtlIHRoaXNcbiAqXG4gKiBgYGBodG1sXG4gKiA8c2NyaXB0IGlkPVwiY29uZmlnXCJcbiAqICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAqICAgICB7XG4gKiAgICAgICAgIFwidXJsXCI6IFwiLi9jb250ZW50Lmh0bWxcIixcbiAqICAgICB9XG4gKiA8L3NjcmlwdD5cbiAqXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZGlzcGxheSBhIGxvYWRlciwgeW91IGNhbiBpbnNlcnQgYSBkaXYgd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiYC5cbiAqIFRoZSBjb250ZW50IG9mIHRoaXMgZGl2IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGxvYWRlZCBjb2RlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqIExPQURFUiAuLi5cbiAqIDwvZGl2PlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIElmIHlvdSBuZWVkIGFkZGl0aW9uYWwgc3RydWN0dXJlLCB5b3UgY2FuIHNpbXBseSBzcGVjaWZ5IGl0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAqICAgPGRpdiBjbGFzcz1cImNvbFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gKiAgICAgICBMT0FERVIgLi4uXG4gKiAgIDwvZGl2PlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIHJlbG9hZC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBSZWxvYWRcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHJlbG9hZCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBSZWxvYWQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3JlbG9hZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCBjdXJyZW50bHkgdGhlIHZhbHVlcyBkZWZpbmVkIGFyZSBgb25zaG93YCBhbmQgYGFsd2F5c2AuIFRoZSBkZWZhdWx0IGBvbnNob3dgIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyPXVuZGVmaW5lZCBkb20gc2VsZWN0b3JzIHRvIHNlYXJjaCBmb3IgZWxlbWVudHMsIGlmIHVuZGVmaW5lZCB0aGVuIGV2ZXJ5dGhpbmcgaXMgdGFrZW5cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qcm9jZXNzb3JbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlLmNhbGwodGhpcyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoYWRvd01vZGU6IGZhbHNlLFxuXHRcdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVsb2FkOiBcIm9uc2hvd1wiLFxuXHRcdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1yZWxvYWRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIHVuZGVmaW5lZCBvciBhbHdheXMgZG8gdGhlIHNhbWVcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCgpIHtcblx0Y29uc3QgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0aWYgKCFpc1N0cmluZyh1cmwpIHx8IHVybCA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdXJsXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBwYXJlbnROb2RlID0gdGhpcztcblx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHBhcmVudE5vZGUgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cdH1cblxuXHRsZXQgY29udGFpbmVyID0gcGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWApO1xuXHRsZXQgY3VycmVudERpc3BsYXlNb2RlID0gY29udGFpbmVyPy5zdHlsZT8uZGlzcGxheTtcblxuXHRpZiAoY3VycmVudERpc3BsYXlNb2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRjdXJyZW50RGlzcGxheU1vZGUgPSBcImluaGVyaXRcIjtcblx0fVxuXG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHRwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdH1cblxuXHRyZXR1cm4gbG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMsIHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyXCIpKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGlmIChjdXJyZW50RGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnREaXNwbGF5TW9kZTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0cmV0dXJuIHRoaXMuaW5uZXJIVE1MO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUmVsb2FkKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jdXN0b21jb250cm9sLWNsYXNzLnBuZ1wiPlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgW3BvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbCkgY2FuIGJlIHVzZWQuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIG9iamVjdCB1c2luZyB0aGUgZnVuY3Rpb24gYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAuXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBQb2x5ZmlsbCBmb3IgYXR0YWNoSW50ZXJuYWxzKCkgY2FuIGJlIHVzZWQ6IHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbHxlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbH0uXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBXSUNHIFdlYiBDb21wb25lbnRzOiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50c3xXSUNHIFdlYiBDb21wb25lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50czoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50c3xDdXN0b20gRWxlbWVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9kZXYvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb25zfEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uc30uXG4gKlxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBjdXN0b20gY29udHJvbHMgYmFzZWQgb24gQ3VzdG9tRWxlbWVudC5cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGV4dGVuZHMgTW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudFxuICovXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IgbWV0aG9kIG9mIEN1c3RvbUNvbnRyb2wsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXHQgKiBJdCBjaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgIGFuZCBpbml0aWFsaXplcyBhbiBpbnRlcm5hbCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudFxuXHQgKiBpZiBzdXBwb3J0ZWQuIEFkZGl0aW9uYWxseSwgaXQgaW5pdGlhbGl6ZXMgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlcy5cblx0ICpcblx0ICogU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZGVmaW5lfEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5kZWZpbmUoKX1cblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZ2V0fEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5nZXQoKX1cblx0ICogYW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFsc3xFbGVtZW50SW50ZXJuYWxzfVxuXHQgKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvbGFiZWxzfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBsYWJlbHMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmxhYmVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7VmFsaWRpdHlTdGF0ZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgW1ZhbGlkaXR5U3RhdGVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WYWxpZGl0eVN0YXRlfVxuXHQgKiBAc2VlIFt2YWxpZGl0eV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3ZhbGlkaXR5fVxuXHQgKi9cblx0Z2V0IHZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGl0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc3RhdGVzXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHN0YXRlcygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uc3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxGb250RWxlbWVudHxudWxsfVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0c2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcikge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9jaGVja1ZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVcblx0ICovXG5cdGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZSwgbW9kZSkge31cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGZvcm1SZXNldENhbGxiYWNrKCkge1xuXHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbCgpIHtcblx0aWYgKCEoYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCBpbiB0aGlzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpc1thdHRhY2hlZEludGVybmFsU3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdC8vIHZhbHVlXG5cdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW1widmFsdWVcIl0gPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0fTtcbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtCdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06aG9zdChtb25zdGVyLWJ1dHRvbil7ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7UmlwcGxlU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGJ1dHRvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItYnV0dG9uPjwvbW9uc3Rlci1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXG4gKiBAc3RhcnR1bWwgYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBzaW1wbGUgYnV0dG9uXG4gKi9cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5CdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfQlVUVE9OX0NMQVNTKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249PHNsb3Q+PC9zbG90PiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGNsaWNrIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRlZmZlY3RzOiB7XG5cdFx0XHRcdHJpcHBsZTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1JpcHBsZVN0eWxlU2hlZXQsIEJ1dHRvblN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1idXR0b24tY2xpY2tlZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCB0eXBlID0gXCJjbGlja1wiO1xuXG5cdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1idXR0b24tY2xpY2tlZFwiLCB7XG5cdFx0XHRidXR0b246IHNlbGYsXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZSAmJiBzZWxmLmhhc05vZGUoZWxlbWVudCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChzZWxmLCBldmVudCk7XG5cdH0pO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImVmZmVjdHMucmlwcGxlXCIpKSB7XG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjcmVhdGVSaXBwbGUuYmluZChzZWxmKSk7XG5cdH1cblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfQlVUVE9OX0NMQVNTXSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHNlbGYuc2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIiwgdmFsdWUpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmlwcGxlKGV2ZW50KSB7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdGNvbnN0IGRpYW1ldGVyID0gTWF0aC5tYXgoYnV0dG9uLmNsaWVudFdpZHRoLCBidXR0b24uY2xpZW50SGVpZ2h0KTtcblx0Y29uc3QgcmFkaXVzID0gZGlhbWV0ZXIgLyAyO1xuXG5cdGNpcmNsZS5zdHlsZS53aWR0aCA9IGNpcmNsZS5zdHlsZS5oZWlnaHQgPSBgJHtkaWFtZXRlcn1weGA7XG5cdGNpcmNsZS5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIGJ1dHRvbi5vZmZzZXRMZWZ0IC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgLSBidXR0b24ub2Zmc2V0VG9wIC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLmNsYXNzTGlzdC5hZGQoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblxuXHRjb25zdCByaXBwbGVzID0gYnV0dG9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblx0Zm9yIChjb25zdCByaXBwbGUgb2YgcmlwcGxlcykge1xuXHRcdHJpcHBsZS5yZW1vdmUoKTtcblx0fVxuXG5cdGJ1dHRvbi5hcHBlbmRDaGlsZChjaXJjbGUpO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQnV0dG9uKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTdGF0ZUJ1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgc3RhdGVidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowO2JvcmRlci1zaGFkb3c6bm9uZX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47dHJhbnNpdGlvbjp3aWR0aCAxMHMgZWFzZS1pbi1vdXR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWxhYmVsXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOndpZHRoIDEycyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPmltZyxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Z3ttYXJnaW4tbGVmdDouM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLnN1Y2Nlc3NmdWx7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzc2Z1bCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYWN0aXZpdHkpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmZhaWxlZHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1mYWlsZWQpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmFjdGl2aXR5e2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdLnN0YXRlbGVzc3tkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBhY3Rpdml0eXswJXt0cmFuc2Zvcm06c2NhbGUoMSl9NTAle3RyYW5zZm9ybTpzY2FsZSguMSl9dG97dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIGJvdW5jeXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKX04MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxLjE1KX05MCV7dHJhbnNmb3JtOnNjYWxlKC45KX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXNcbiAqL1xuY2xhc3MgU3RhdGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihzdGF0ZSwgcHJlc2VudGF0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlID0gdmFsaWRhdGVTdHJpbmcoc3RhdGUpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbiA9IHZhbGlkYXRlU3RyaW5nKHByZXNlbnRhdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHN0YXRlXG5cdCAqL1xuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcmVzZW50YXRpb25cblx0ICovXG5cdGdldCBwcmVzZW50YXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSxcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlSW5zdGFuY2VGb3Ioc3RhdGUpIHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgXCJzdGF0ZWxlc3NcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXCJzdGF0ZWxlc3NcIiwgXCJcIik7XG5cdFx0Y2FzZSBcInN1Y2Nlc3NmdWxcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwic3VjY2Vzc2Z1bFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwic3VjY2Vzc2Z1bFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNHptMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTZ6XCIvPjxwYXRoIGQ9XCJNMTAuOTcgNC45N2EuMjM1LjIzNSAwIDAgMC0uMDIuMDIyTDcuNDc3IDkuNDE3IDUuMzg0IDcuMzIzYS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDV6XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJhY3Rpdml0eVwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJhY3Rpdml0eVwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYWN0aXZpdHlcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiOFwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRjYXNlIFwiZmFpbGVkXCI6IC8vIGh0dHBzOi8vaWNvbnMuZ2V0Ym9vdHN0cmFwLmNvbS9pY29ucy9leGNsYW1hdGlvbi1jaXJjbGUvXG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImZhaWxlZFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiZmFpbGVkXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk03LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDB6TTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAwTDcuMSA0Ljk5NXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoc3RhdGUsIFwiXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IGdldFN0YXRlSW5zdGFuY2VGb3IsIFN0YXRlIH0gZnJvbSBcIi4vdHlwZXMvc3RhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvc3RhdGUtYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXN0YXRlLWJ1dHRvbj48L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7U3RhdGVCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9zdGF0ZS1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIHN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBCdXR0b25cbiAqIEJ1dHRvbiA8fC0tIFN0YXRlQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHN0YXRlIGJ1dHRvbiB3aXRoIGljb25zXG4gKi9cbmNsYXNzIFN0YXRlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHN0YXRlcyBBdmFpbGFibGUgc3RhdHVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5zdWNjZXNzZnVsPSBzdWNjZXNzZnVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5hY3Rpdml0eT0gYWN0aXZpdHlcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmZhaWxlZD0gZmFpbGVkXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IGN1cnJlbnQgY3VycmVudCBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2xpY2tcblx0ICogQGV4dGVuZHMge0J1dHRvbn1cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvaWNvbnMvYmxvYi9tYWluL0xJQ0VOU0UubWR8Qm9vdHN0cmFwIGljb25zIGxpY2Vuc2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRzdGF0ZXM6IHtcblx0XHRcdFx0c3VjY2Vzc2Z1bDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN1Y2Nlc3NmdWxcIiksXG5cdFx0XHRcdGFjdGl2aXR5OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiYWN0aXZpdHlcIiksXG5cdFx0XHRcdGZhaWxlZDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcImZhaWxlZFwiKSxcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1dHRvbi5cblx0ICogSWYgYSB0aW1lb3V0IGlzIHNldCwgdGhlIHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhZnRlciB0aGVcblx0ICogc3BlY2lmaWVkIHRpbWUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjE4LjAgYSBwcmV2aW91c2x5IHNldCB0aW1lb3V0IGlzIGNsZWFyZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRjb25zdCB0aW1lb3V0U3ltYm9sID0gU3ltYm9sLmZvcihcInRpbWVvdXRcIik7XG5cdFx0aWYgKHRoaXNbdGltZW91dFN5bWJvbF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXNbdGltZW91dFN5bWJvbF0pO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5nZXRPcHRpb24oYHN0YXRlcy4ke3ZhbGlkYXRlU3RyaW5nKHN0YXRlKX1gKTtcblx0XHRpZiAob2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBmb3VuZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcImN1cnJlbnRcIiwgdmFsaWRhdGVJbnN0YW5jZShvYmosIFN0YXRlKSk7XG5cblx0XHRpZiAoaXNJbnRlZ2VyKHRpbWVvdXQpICYmIHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aGlzW3RpbWVvdXRTeW1ib2xdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlU3RhdGUoKTtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJjdXJyZW50XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IEJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImxhYmVsXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y3VycmVudC5zdGF0ZVwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQucHJlc2VudGF0aW9uXCI+PC9kaXY+XG4gICAgPC9idXR0b24+XG48L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3RhdGVCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgREVMSU1JVEVSLCBQYXRoZmluZGVyLCBXSUxEQ0FSRCB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IGJ1aWxkTWFwLCBQQVJFTlQsIGFzc2VtYmxlUGFydHMgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5jb25zdCBQQVJFTlQgPSBcIl5cIjtcblxuLyoqXG4gKiBNYXBzIGNhbiBiZSBlYXNpbHkgY3JlYXRlZCBmcm9tIGRhdGEgb2JqZWN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmdW5jdGlvbiBgYnVpbGRNYXAoKWAuXG4gKlxuICogVGhlIHBhdGggY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzaW1wbGUgZGVmaW5pdGlvbiBhLmIuYyBvciBhIHRlbXBsYXRlICR7YS5iLmN9LlxuICogS2V5IGFuZCB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgZGVmaW5pdGlvbiBvciBhIHRlbXBsYXRlLiBUaGUga2V5IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVmaW5lZC5cbiAqIFRoZSB0ZW1wbGF0ZXMgZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBrZXlzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hcC4gRWl0aGVyIGEgc2luZ2xlIHZhbHVlXG4gKiBpZCBjYW4gYmUgdGFrZW4gb3IgYSBjb21wb3NpdGUga2V5ICR7aWR9ICR7bmFtZX0gY2FuIGJlIHVzZWQuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gYWNjZXNzIHZhbHVlcyBvZiB0aGUgcGFyZW50IGRhdGEgc2V0LCB5b3UgaGF2ZSB0byB1c2UgdGhlIF4gY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSAke2lkfSAke14ubmFtZX0uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvYnVpbGRtYXAubWpzXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgZGF0YSBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBwYXRoIHRvIHRoZSBkYXRhIG9iamVjdCwgb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSBrZXkgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgdmFsdWVzLlxuICogQHJldHVybiB7Kn0gLSBUaGUgY3JlYXRlZCBtYXAuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHZhbHVlIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHNlbGVjdG9yIGNhbGxiYWNrIGRvZXMgbm90IHJldHVybiBhIG1hcC5cbiAqKi9cbmZ1bmN0aW9uIGJ1aWxkTWFwKHN1YmplY3QsIHNlbGVjdG9yLCB2YWx1ZVRlbXBsYXRlLCBrZXlUZW1wbGF0ZSwgZmlsdGVyKSB7XG5cdHJldHVybiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG5cdFx0ayA9IGJ1aWxkKHYsIGtleVRlbXBsYXRlLCBrKTtcblx0XHR2ID0gYnVpbGQodiwgdmFsdWVUZW1wbGF0ZSk7XG5cdFx0dGhpcy5zZXQoaywgdik7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoZSBhc3NlbWJsZVBhcnRzIGZ1bmN0aW9uIGlzIGEgcHJpdmF0ZSBmdW5jdGlvbiB0aGF0IGhlbHBzIGluIGJ1aWxkaW5nIGEgbWFwIGZyb20gYSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiBhIHByb3ZpZGVkXG4gKiBzZWxlY3Rvci4gVGhlIHNlbGVjdG9yIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFcbiAqIGhlbHBlciBmdW5jdGlvbiBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBwYXJhbWV0ZXJzOlxuICpcbiAqIHN1YmplY3Q6IFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHRcbiAqIHNlbGVjdG9yOiBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBmaWx0ZXIgKG9wdGlvbmFsKTogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBJZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGlzIGV4ZWN1dGVkIHBhc3NpbmcgdGhlIHN1YmplY3QgYXMgaXRzIGFyZ3VtZW50LFxuICogYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNYXAuIE90aGVyd2lzZSwgaWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIHN0cmluZyxcbiAqIGJ1aWxkRmxhdE1hcCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBmbGF0IG1hcCB3aXRoIGtleXMgYW5kIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLlxuICpcbiAqIElmIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBjZXJ0YWluIGVsZW1lbnRzIGZyb20gdGhlIG1hcCwgYmFzZWQgb24gc29tZVxuICogY3JpdGVyaWEuIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgdmFsdWUsIGtleSwgYW5kIG1hcCBvYmplY3QsIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIHY6IFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudFxuICogazogVGhlIGtleSBvZiB0aGUgZWxlbWVudFxuICogbTogVGhlIG1hcCBvYmplY3RcbiAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLiBJZiBtYXAgaXMgbm90IGFuIGluc3RhbmNlIG9mIE1hcCwgYW4gZW1wdHkgbWFwIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIG5hbWU6IFwiSm9oblwiLFxuICogICBhZ2U6IDMwLFxuICogICBhZGRyZXNzOiB7XG4gKiAgICAgY2l0eTogXCJOZXcgWW9ya1wiLFxuICogICAgIHN0YXRlOiBcIk5ZXCIsXG4gKiAgICAgY291bnRyeTogXCJVU0FcIixcbiAqICAgfSxcbiAqIH07XG4gKlxuICogY29uc3Qgc2VsZWN0b3IgPSBcImFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBtYXAgPSBhc3NlbWJsZVBhcnRzKG9iaiwgc2VsZWN0b3IsIG51bGwsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG4gKiAgIHRoaXMuc2V0KGssIHYpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cobWFwKTtcbiAqIC8vIE91dHB1dDogTWFwKDMpIHtcbiAqIC8vICAgXCJhZGRyZXNzLmNpdHlcIiA9PiBcIk5ldyBZb3JrXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5zdGF0ZVwiID0+IFwiTllcIixcbiAqIC8vICAgXCJhZGRyZXNzLmNvdW50cnlcIiA9PiBcIlVTQVwiXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHQuXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm4ge01hcH0gLSBBIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBXaGVuIHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmZ1bmN0aW9uIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgY2FsbGJhY2spIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGxldCBtYXA7XG5cdGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IHNlbGVjdG9yKHN1YmplY3QpO1xuXHRcdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXBcIik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRidWlsZEZsYXRNYXAuY2FsbChtYXAsIHN1YmplY3QsIHNlbGVjdG9yKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvblwiKTtcblx0fVxuXG5cdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwLmZvckVhY2goKHYsIGssIG0pID0+IHtcblx0XHRpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG5cdFx0XHRpZiAoZmlsdGVyLmNhbGwobSwgdiwgaykgIT09IHRydWUpIHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHJlc3VsdCwgdiwgaywgbSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBwYXJlbnRNYXBcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmxhdE1hcChzdWJqZWN0LCBzZWxlY3Rvciwga2V5LCBwYXJlbnRNYXApIHtcblx0Y29uc3QgY3VycmVudE1hcCA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSB0aGlzLnNpemU7XG5cblx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBbXTtcblxuXHRjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KERFTElNSVRFUik7XG5cdGxldCBjdXJyZW50ID0gXCJcIjtcblx0Y29uc3QgY3VycmVudFBhdGggPSBbXTtcblx0ZG8ge1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdGN1cnJlbnRQYXRoLnB1c2goY3VycmVudCk7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gV0lMRENBUkQpIHtcblx0XHRcdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXHRcdFx0bGV0IG1hcDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bWFwID0gZmluZGVyLmdldFZpYShjdXJyZW50UGF0aC5qb2luKERFTElNSVRFUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zdCBhID0gZTtcblx0XHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBtYXApIHtcblx0XHRcdFx0Y29uc3QgY29weUtleSA9IGNsb25lKGtleSk7XG5cblx0XHRcdFx0Y3VycmVudFBhdGgubWFwKChhKSA9PiB7XG5cdFx0XHRcdFx0Y29weUtleS5wdXNoKGEgPT09IFdJTERDQVJEID8gayA6IGEpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBrayA9IGNvcHlLZXkuam9pbihERUxJTUlURVIpO1xuXHRcdFx0XHRjb25zdCBzdWIgPSBidWlsZEZsYXRNYXAuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdFx0cGFydHMuam9pbihERUxJTUlURVIpLFxuXHRcdFx0XHRcdGNvcHlLZXksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXNPYmplY3Qoc3ViKSAmJiBwYXJlbnRNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHN1YltQQVJFTlRdID0gcGFyZW50TWFwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudE1hcC5zZXQoa2ssIHN1Yik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKTtcblxuXHQvLyBubyBzZXQgaW4gY2hpbGQgcnVuXG5cdGlmIChyZXN1bHRMZW5ndGggPT09IHRoaXMuc2l6ZSkge1xuXHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIGN1cnJlbnRNYXApIHtcblx0XHRcdHRoaXMuc2V0KGssIG8pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdWJqZWN0O1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQWx0ZXJuYXRpdmVseSB0byBhIHN0cmluZyBzZWxlY3RvciBhIGNhbGxiYWNrIGNhbiBiZSBzcGVjaWZpZWQuIHRoaXMgbXVzdCByZXR1cm4gYSBtYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YnVpbGRNYXB9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RhdGEvYnVpbGRtYXAubWpzJztcbiAqXG4gKiBsZXQgb2JqID0ge1xuICogICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9O1xuICpcbiAqIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gKiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG4gKlxuICogICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICpcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAqICAgICAgICAgICAgfVxuICpcbiAqIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke3ZrfScsICcke2lkfScpXG4gKlxuICogLy8gXHUyMUE2IE1hcCgzKSB7XG4gKiAvLyAgXCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4wLjFcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4wXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjBcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4xXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjFcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4wXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjFcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMFwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4xXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjBcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMVwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4wXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjFcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCJcbiAqIC8vIH1cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHN1YmplY3Qgc3ViamVjdFxuICogQHJldHVybiBNYXBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTcuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZpbml0aW9uXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGQoc3ViamVjdCwgZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKSB7XG5cdGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiBzdWJqZWN0O1xuXHR2YWxpZGF0ZVN0cmluZyhkZWZpbml0aW9uKTtcblxuXHRjb25zdCByZWdleHAgPSAvKD88cGxhY2Vob2xkZXI+XFwkeyg/PHBhdGg+W2EtelxcXkEtWi5cXC1fMC05XSopfSkvZ207XG5cdGNvbnN0IGFycmF5ID0gWy4uLmRlZmluaXRpb24ubWF0Y2hBbGwocmVnZXhwKV07XG5cblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cblx0aWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmaW5kZXIuZ2V0VmlhKGRlZmluaXRpb24pO1xuXHR9XG5cblx0YXJyYXkuZm9yRWFjaCgoYSkgPT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IGE/LltcImdyb3Vwc1wiXTtcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGdyb3Vwcz8uW1wicGxhY2Vob2xkZXJcIl07XG5cdFx0aWYgKHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBhdGggPSBncm91cHM/LltcInBhdGhcIl07XG5cblx0XHRsZXQgdiA9IGZpbmRlci5nZXRWaWEocGF0aCk7XG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkgdiA9IGRlZmF1bHRWYWx1ZTtcblxuXHRcdGRlZmluaXRpb24gPSBkZWZpbml0aW9uLnJlcGxhY2VBbGwocGxhY2Vob2xkZXIsIHYpO1xuXHR9KTtcblxuXHRyZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIGNvbnN0IGxyID0gWydsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJsID0gWydyaWdodCcsICdsZWZ0J107XG4gIGNvbnN0IHRiID0gWyd0b3AnLCAnYm90dG9tJ107XG4gIGNvbnN0IGJ0ID0gWydib3R0b20nLCAndG9wJ107XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmwgOiBscjtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHIgOiBybDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiIDogYnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZWN0LFxuICAgIHRvcDogcmVjdC55LFxuICAgIGxlZnQ6IHJlY3QueCxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJpbXBvcnQgeyBnZXRTaWRlQXhpcywgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QXhpc0xlbmd0aCwgZ2V0U2lkZSwgZ2V0QWxpZ25tZW50LCBldmFsdWF0ZSwgZ2V0UGFkZGluZ09iamVjdCwgcmVjdFRvQ2xpZW50UmVjdCwgbWluLCBjbGFtcCwgcGxhY2VtZW50cywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBzaWRlcywgbWF4LCBnZXRPcHBvc2l0ZUF4aXMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuZXhwb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KF9yZWYsIHBsYWNlbWVudCwgcnRsKSB7XG4gIGxldCB7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWduTGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IHNpZGVBeGlzID09PSAneSc7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBmbG9hdGluZy53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcbiAgY29uc3QgY29tbW9uQWxpZ24gPSByZWZlcmVuY2VbYWxpZ25MZW5ndGhdIC8gMiAtIGZsb2F0aW5nW2FsaWduTGVuZ3RoXSAvIDI7XG4gIGxldCBjb29yZHM7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZmxvYXRpbmcuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG4gIHN3aXRjaCAoZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgLi4ucmVjdHMuZmxvYXRpbmcsXG4gICAgeCxcbiAgICB5XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBnZXRTaWRlKGluaXRpYWxQbGFjZW1lbnQpID09PSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICAgICAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBBbGlnbm1lbnQgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoaW5pdGlhbFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQpKTtcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJykge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRtYXAkc287XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJG1hcCRzbyA9IG92ZXJmbG93c0RhdGEubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJG1hcCRzb1swXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGwsXG4gICAgLi4ucmF3VmFsdWVcbiAgfTtcbiAgaWYgKGFsaWdubWVudCAmJiB0eXBlb2YgYWxpZ25tZW50QXhpcyA9PT0gJ251bWJlcicpIHtcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcbiAgfVxuICByZXR1cm4gaXNWZXJ0aWNhbCA/IHtcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcbiAgICB5OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGlcbiAgfSA6IHtcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXG4gICAgeTogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGlcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ29mZnNldCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJGFycm93O1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBJZiB0aGUgcGxhY2VtZW50IGlzIHRoZSBzYW1lIGFuZCB0aGUgYXJyb3cgY2F1c2VkIGFuIGFsaWdubWVudCBvZmZzZXRcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UucGxhY2VtZW50KSAmJiAoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB4ICsgZGlmZkNvb3Jkcy54LFxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uZGlmZkNvb3JkcyxcbiAgICAgICAgICBwbGFjZW1lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NoaWZ0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgbGltaXRlciA9IHtcbiAgICAgICAgICBmbjogX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IG1haW5BeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgbWFpbkF4aXNDb29yZCA9IGNsYW1wKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdGVkQ29vcmRzID0gbGltaXRlci5mbih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubGltaXRlZENvb3JkcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHg6IGxpbWl0ZWRDb29yZHMueCAtIHgsXG4gICAgICAgICAgeTogbGltaXRlZENvb3Jkcy55IC0geVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT2Zmc2V0ID0gdHlwZW9mIHJhd09mZnNldCA9PT0gJ251bWJlcicgPyB7XG4gICAgICAgIG1haW5BeGlzOiByYXdPZmZzZXQsXG4gICAgICAgIGNyb3NzQXhpczogMFxuICAgICAgfSA6IHtcbiAgICAgICAgbWFpbkF4aXM6IDAsXG4gICAgICAgIGNyb3NzQXhpczogMCxcbiAgICAgICAgLi4ucmF3T2Zmc2V0XG4gICAgICB9O1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBpZiAobWFpbkF4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRvZmZzZTI7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGlzT3JpZ2luU2lkZSA9IFsndG9wJywgJ2xlZnQnXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIChpc09yaWdpblNpZGUgPyAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZVtjcm9zc0F4aXNdKSB8fCAwIDogMCkgKyAoaXNPcmlnaW5TaWRlID8gMCA6IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcbiAgICAgICAgaWYgKGNyb3NzQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgXHUyMDE0XG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaXplJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV07XG4gICAgICBjb25zdCBub1NoaWZ0ID0gIXN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0O1xuICAgICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0O1xuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ1dpZHRoID0gd2lkdGggLSBvdmVyZmxvdy5sZWZ0IC0gb3ZlcmZsb3cucmlnaHQ7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gYWxpZ25tZW50IHx8IG5vU2hpZnQgPyBtaW4ob3ZlcmZsb3dBdmFpbGFibGVXaWR0aCwgbWF4aW11bUNsaXBwaW5nV2lkdGgpIDogbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGFsaWdubWVudCB8fCBub1NoaWZ0ID8gbWluKG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0LCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpIDogbWF4aW11bUNsaXBwaW5nSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG5vU2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xuIiwgImZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgYFNoYWRvd1Jvb3RgIHN1cHBvcnQuXG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhWydpbmxpbmUnLCAnY29udGVudHMnXS5pbmNsdWRlcyhkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgcmV0dXJuIGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5wYWdlWE9mZnNldCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQucGFnZVlPZmZzZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgd2luLmZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyh3aW4uZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBmbGlwIGFzIGZsaXAkMSwgc2l6ZSBhcyBzaXplJDEsIGhpZGUgYXMgaGlkZSQxLCBhcnJvdyBhcyBhcnJvdyQxLCBpbmxpbmUgYXMgaW5saW5lJDEsIGxpbWl0U2hpZnQgYXMgbGltaXRTaGlmdCQxLCBjb21wdXRlUG9zaXRpb24gYXMgY29tcHV0ZVBvc2l0aW9uJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdywgb2Zmc2V0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGN1cnJlbnRXaW4uZnJhbWVFbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGN1cnJlbnRXaW4uZnJhbWVFbGVtZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9KTtcbn1cblxuY29uc3QgdG9wTGF5ZXJTZWxlY3RvcnMgPSBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ107XG5mdW5jdGlvbiBpc1RvcExheWVyKGZsb2F0aW5nKSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZsb2F0aW5nLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufVxuXG4vLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlLlxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICBjb25zdCB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgbGV0IHggPSAtc2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXNjcm9sbC5zY3JvbGxUb3A7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgbGV0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICBsZXQgeCA9IDA7XG4gIGxldCB5ID0gMDtcbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgY29uc3QgdmlzdWFsVmlld3BvcnRCYXNlZCA9IGlzV2ViS2l0KCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICAuLi5jbGlwcGluZ0FuY2VzdG9yLFxuICAgICAgeDogY2xpcHBpbmdBbmNlc3Rvci54IC0gdmlzdWFsT2Zmc2V0cy54LFxuICAgICAgeTogY2xpcHBpbmdBbmNlc3Rvci55IC0gdmlzdWFsT2Zmc2V0cy55XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdChyZWN0KTtcbn1cbmZ1bmN0aW9uIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBzdG9wTm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKHBhcmVudE5vZGUgPT09IHN0b3BOb2RlIHx8ICFpc0VsZW1lbnQocGFyZW50Tm9kZSkgfHwgaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICBsZXQgY3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/IGdldFBhcmVudE5vZGUoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHdoaWxlIChpc0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlSXNDb250YWluaW5nID0gaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpO1xuICAgIGlmICghY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGREcm9wQ3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiAhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgOiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgISFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSAmJiBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5jbHVkZXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIC4uLihhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZykpXG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaW8ub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuICByZWZyZXNoKHRydWUpO1xuICByZXR1cm4gY2xlYW51cDtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gbmVjZXNzYXJ5LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgbW91bnRlZCBvbiB0aGUgRE9NIG9yXG4gKiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uXG4gKiBAcmV0dXJucyBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpc1xuICogcmVtb3ZlZCBmcm9tIHRoZSBET00gb3IgaGlkZGVuIGZyb20gdGhlIHNjcmVlbi5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvVXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGF1dG9VcGRhdGUocmVmZXJlbmNlLCBmbG9hdGluZywgdXBkYXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIGFuY2VzdG9yU2Nyb2xsID0gdHJ1ZSxcbiAgICBhbmNlc3RvclJlc2l6ZSA9IHRydWUsXG4gICAgZWxlbWVudFJlc2l6ZSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBsYXlvdXRTaGlmdCA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBhbmltYXRpb25GcmFtZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IHVud3JhcEVsZW1lbnQocmVmZXJlbmNlKTtcbiAgY29uc3QgYW5jZXN0b3JzID0gYW5jZXN0b3JTY3JvbGwgfHwgYW5jZXN0b3JSZXNpemUgPyBbLi4uKHJlZmVyZW5jZUVsID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMocmVmZXJlbmNlRWwpIDogW10pLCAuLi5nZXRPdmVyZmxvd0FuY2VzdG9ycyhmbG9hdGluZyldIDogW107XG4gIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICB9KTtcbiAgY29uc3QgY2xlYW51cElvID0gcmVmZXJlbmNlRWwgJiYgbGF5b3V0U2hpZnQgPyBvYnNlcnZlTW92ZShyZWZlcmVuY2VFbCwgdXBkYXRlKSA6IG51bGw7XG4gIGxldCByZW9ic2VydmVGcmFtZSA9IC0xO1xuICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICBpZiAoZWxlbWVudFJlc2l6ZSkge1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKF9yZWYgPT4ge1xuICAgICAgbGV0IFtmaXJzdEVudHJ5XSA9IF9yZWY7XG4gICAgICBpZiAoZmlyc3RFbnRyeSAmJiBmaXJzdEVudHJ5LnRhcmdldCA9PT0gcmVmZXJlbmNlRWwgJiYgcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gUHJldmVudCB1cGRhdGUgbG9vcHMgd2hlbiB1c2luZyB0aGUgYHNpemVgIG1pZGRsZXdhcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMTc0MFxuICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZW9ic2VydmVGcmFtZSk7XG4gICAgICAgIHJlb2JzZXJ2ZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyO1xuICAgICAgICAgIChfcmVzaXplT2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdXBkYXRlKCk7XG4gICAgfSk7XG4gICAgaWYgKHJlZmVyZW5jZUVsICYmICFhbmltYXRpb25GcmFtZSkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2VFbCk7XG4gICAgfVxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICB9XG4gIGxldCBmcmFtZUlkO1xuICBsZXQgcHJldlJlZlJlY3QgPSBhbmltYXRpb25GcmFtZSA/IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpIDogbnVsbDtcbiAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZnJhbWVMb29wKCk7XG4gIH1cbiAgZnVuY3Rpb24gZnJhbWVMb29wKCkge1xuICAgIGNvbnN0IG5leHRSZWZSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSk7XG4gICAgaWYgKHByZXZSZWZSZWN0ICYmIChuZXh0UmVmUmVjdC54ICE9PSBwcmV2UmVmUmVjdC54IHx8IG5leHRSZWZSZWN0LnkgIT09IHByZXZSZWZSZWN0LnkgfHwgbmV4dFJlZlJlY3Qud2lkdGggIT09IHByZXZSZWZSZWN0LndpZHRoIHx8IG5leHRSZWZSZWN0LmhlaWdodCAhPT0gcHJldlJlZlJlY3QuaGVpZ2h0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRhcnJvdyxcblx0YXV0b1BsYWNlbWVudCxcblx0YXV0b1VwZGF0ZSxcblx0ZGV0ZWN0T3ZlcmZsb3csXG5cdGNvbXB1dGVQb3NpdGlvbixcblx0b2Zmc2V0LFxuXHRmbGlwLFxuXHRzaXplLFxuXHRzaGlmdCxcbn0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNBcnJheSwgaXNPYmplY3QsIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IHBvc2l0aW9uUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjb250cm9sRWxlbWVudFxuICogQHBhcmFtIHBvcHBlckVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZXwqfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvblBvcHBlcihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucykge1xuXHRjb25zdCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgYXJyb3dFbGVtZW50ID0gY29udHJvbEVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XVwiLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRjb25zdCBtaWRkbGV3YXJlID0gY29uZmlnPy5bXCJtaWRkbGV3YXJlXCJdO1xuXHRcdGlmICghaXNBcnJheShtaWRkbGV3YXJlKSkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBtaWRkbGV3YXJlLnNwbGl0KFwiLFwiKS5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbWlkZGxld2FyZSkge1xuXHRcdFx0Y29uc3QgbGluZSA9IG1pZGRsZXdhcmVba2V5XTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QobGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTdHJpbmcobGluZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBNaWRkbGV3YXJlIG11c3QgYmUgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBHb3QgJHt0eXBlb2YgbGluZX1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrdiA9IGxpbmUuc3BsaXQoXCI6XCIpO1xuXHRcdFx0Y29uc3QgZm4gPSBrdi5zaGlmdCgpO1xuXG5cdFx0XHRzd2l0Y2ggKGZuKSB7XG5cdFx0XHRcdGNhc2UgXCJmbGlwXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZmxpcCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2hpZnRcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXV0b1BsYWNlbWVudFwiOlxuXHRcdFx0XHRcdGxldCBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl07XG5cblx0XHRcdFx0XHRjb25zdCBkZWZQbGFjZW1lbnQgPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaXNTdHJpbmcoZGVmUGxhY2VtZW50KSAmJiBkZWZQbGFjZW1lbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IGRlZlBsYWNlbWVudFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmNsdWRlcyhjb25maWcucGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnNwbGljZShcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluZGV4T2YoY29uZmlnLnBsYWNlbWVudCksXG5cdFx0XHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMudW5zaGlmdChjb25maWcucGxhY2VtZW50KTtcblxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGF1dG9QbGFjZW1lbnQoe1xuXHRcdFx0XHRcdFx0Y3Jvc3NBeGlzOiB0cnVlLFxuXHRcdFx0XHRcdFx0YXV0b0FsaWdubWVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsbG93ZWRQbGFjZW1lbnRzOiBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRldGVjdE92ZXJmbG93XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZGV0ZWN0T3ZlcmZsb3coKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImFycm93XCI6XG5cdFx0XHRcdFx0aWYgKGFycm93RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2l6ZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNpemUoe1xuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBlbGVtZW50cyB9KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heFdpZHRoID0gYm9keS5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4SGVpZ2h0ID0gYm9keS5jbGllbnRIZWlnaHQ7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1NlbGVjdFN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBzZWxlY3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2ZsZXg6NCAwIDkwJTttaW4taGVpZ2h0OjEuNGVtfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdLm9wZW57YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstby1ib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOi40cmVtIC42cmVtfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1yZW1vdmUtYmFkZ2Vde2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4O21pbi1oZWlnaHQ6MTZweDtvcmRlcjoyO3dpZHRoOjE2cHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17ZmlsdGVyOmludmVydCgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1maWx0ZXJde2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MjAwO29yZGVyOjk5OTk5OTk5O3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXI6MDtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7bWluLXdpZHRoOjQwJTtvdXRsaW5lOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlfS5hY3RpdmVbZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXVtuYW1lPXBvcHBlci1maWx0ZXJde2hlaWdodDoxLjVlbTttYXJnaW46Mi41ZW07cGFkZGluZzoycHg7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKjIpfS5vcHRpb24tZmlsdGVyLWNvbnRyb2x7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07bWFyZ2luOi0xLjFlbSAtMS4xZW0gLjNlbX0uc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXN7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O21pbi1oZWlnaHQ6MTZweDt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10ub3BlbntiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdLmVtcHR5e2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10uY2xlYXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10ubG9hZGluZ3thbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTphY3Rpdml0eTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLDAsLjIsMSk7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYWN0aXZpdHknJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpO21hcmdpbjoxLjFlbSAwIDAgMS4xZW19LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZvY3VzZWQ9dHJ1ZV17b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpO291dGxpbmUtb2Zmc2V0Oi0ycHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+aW5wdXQ6Zm9jdXMsW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+bGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBidWlsZE1hcCB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0dXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcblx0ZmlyZUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zZWxlY3QubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0cG9wcGVyRWxlbWVudFN5bWJvbCxcblx0Z2V0U3VtbWFyeVRlbXBsYXRlLFxuXHRnZXRTZWxlY3Rpb25UZW1wbGF0ZSxcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UgPSBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBjbGlja1RvTG9hZE9wdGlvbnNNZXNzYWdlID0gXCJDbGljayB0byBsb2FkIG9wdGlvbnMuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBrZXlGaWx0ZXJFdmVudFN5bWJvbCA9IFN5bWJvbChcImtleUZpbHRlckV2ZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBsYXp5TG9hZERvbmVTeW1ib2wgPSBTeW1ib2woXCJsYXp5TG9hZERvbmVcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbGVhck9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwia2V5RXZlbnRIYW5kbGVyXCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnB1dEV2ZW50SGFuZGxlciA9IFN5bWJvbChcImlucHV0RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNlbGVjdGlvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzZWxlY3Rpb25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250YWluZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGlubGluZUZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJpbmxpbmVGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcblx0XCJwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wdGlvbnNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3B0aW9uc0VsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbCA9IFN5bWJvbChcIkBAYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9VUCA9IDE7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fRE9XTiA9IDI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX1JFTU9URSA9IFwicmVtb3RlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX09QVElPTlMgPSBcIm9wdGlvbnNcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgPSBcInBvcHBlclwiO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VsZWN0aW9uXG4gKiBAcHJvcGVydHkgeyp9IHZhbHVlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbGFiZWxcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMi4wXG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHNlbGVjdCBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcsIGxvY2FsIGFuZCByZW1vdGUsIG11bHRpcGxlIHNlbGVjdGlvbiBhbmQgaGFzIGFcbiAqIHRlbXBsYXRlIHN5c3RlbSBmb3IgZGlzcGxheWluZyB0aGUgb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3NlbGVjdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXNlbGVjdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3Q+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1NlbGVjdH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3NlbGVjdC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICogYGBgXG4gKlxuICogIyMgRXZlbnRzXG4gKlxuICogVGhlIGV2ZW50IGBtb25zdGVyLWNoYW5nZWAgaXMgc2VudCBhcyBzb29uIGFzIHNvbWVvbmUgaGFzIGNsaWNrZWQgb24gYSBpbnB1dCBjb250cm9sLlxuICogYG1vbnN0ZXItY2hhbmdlZGAgaXMgc2VudCBhcyBzb29uIGFzIHRoZSBjb250cm9sIGhhcyBwcm9jZXNzZWQgdGhpcyBpbnB1dC5cbiAqIFRoZSBgbW9uc3Rlci1jaGFuZ2VkYCBldmVudCBpcyBzZW50IHdoZW4gc2V0dGluZyBhIHNlbGVjdGlvbi4gSWYgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIHNldCwgdGhlIGBtb25zdGVyLW9wdGlvbnMtc2V0YCBldmVudCBpcyBzZW50LlxuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItY2hhbmdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1jaGFuZ2VkJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1zZWxlY3RlZCcsKGUpPT5jb25zb2xlLmxvZyhlLmRldGFpbCkpXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzXG4gKiBAc3RhcnR1bWwgc2VsZWN0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFNlbGVjdFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBTZWxlY3QgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIEBleHRlbmRzIEN1c3RvbUNvbnRyb2xcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiBjb252ZXJ0U2VsZWN0aW9uVG9WYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgc2VsZWN0aW9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogZS52YWx1ZT0xXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX0gdmFsdWVcblx0ICogQHNpbmNlIDEuMi4wXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdC5jYWxsKHRoaXMsIHJlc3VsdC5zZWxlY3Rpb24pXG5cdFx0XHQudGhlbigoKSA9PiB7fSlcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWxlZ2F0ZXNGb2N1cz1mYWxzZSBsb3JlbSBbc2VlIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9kZWxlZ2F0ZXNGb2N1cylcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gb3B0aW9ucyBTZWxlY3Rpb24gb2Yga2V5IGlkZW50aWZpZXIgcGFpcnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYW5kIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52YWx1ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZpc2liaWxpdHkgaGlkZGVuIG9yIHZpc2libGVcblx0ICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtJbnRlZ2VyfSBzaG93TWF4T3B0aW9ucz0xMCBNYXhpbXVtIG51bWJlciBvZiB2aXNpYmxlIG9wdGlvbnMgYmVmb3JlIGEgc2Nyb2xsIGJhciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1yYWRpbyBNdWx0aXBsZSAoY2hlY2tib3gpIG9yIHNpbmdsZSBzZWxlY3Rpb24gKHJhZGlvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGUgbm8gb3B0aW9ucyBhdmFpbGFibGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5zZWxlY3QtYW4tb3B0aW9uIHNlbGVjdCBhbiBvcHRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgTGlzdCB3aXRoIGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXJBbGw9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGJ1dHRvbiB0byBkZWxldGUgdGhlIGVudGlyZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMubGF6eUxvYWQ9ZmFsc2UgTG9hZCBvcHRpb25zIHdoZW4gZmlyc3Qgb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbG9zZU9uU2VsZWN0PWZhbHNlIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAoc2luY2UgMy41NC4wKVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmVtcHR5VmFsdWVJZk5vT3B0aW9ucz1mYWxzZSBJZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHRoZSBzZWxlY3Rpb24gaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmlsdGVyLmRlZmF1bHRWYWx1ZT0qIERlZmF1bHQgZmlsdGVyIHZhbHVlLCBpZiB0aGUgZmlsdGVyIGlzIGVtcHR5XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmlsdGVyLm1vZGU9b3B0aW9ucyBGaWx0ZXIgbW9kZSwgdmFsdWVzOiBvcHRpb25zLCByZW1vdGUsIGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bGF6eUxvYWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5VmFsdWVJZk5vT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFx0XCJjYW5ub3QtYmUtbG9hZGVkXCI6IFwiQ2Fubm90IGJlIGxvYWRlZFwiLFxuXHRcdFx0XHRcdFwibm8tb3B0aW9ucy1hdmFpbGFibGVcIjogbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSxcblx0XHRcdFx0XHRcImNsaWNrLXRvLWxvYWQtb3B0aW9uc1wiOiBjbGlja1RvTG9hZE9wdGlvbnNNZXNzYWdlLFxuXHRcdFx0XHRcdFwic2VsZWN0LWFuLW9wdGlvblwiOiBcIlNlbGVjdCBhbiBvcHRpb25cIixcblx0XHRcdFx0XHRcInN1bW1hcnktdGV4dFwiOiB7XG5cdFx0XHRcdFx0XHR6ZXJvOiBcIk5vIGVudHJpZXMgd2VyZSBzZWxlY3RlZFwiLFxuXHRcdFx0XHRcdFx0b25lOiAnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPjE8L3NwYW4+IGVudHJ5IHdhcyBzZWxlY3RlZCcsXG5cdFx0XHRcdFx0XHRvdGhlcjpcblx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwibW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGxcIj4ke2NvdW50fTwvc3Bhbj4gZW50cmllcyB3ZXJlIHNlbGVjdGVkJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwibm8tb3B0aW9uc1wiOlxuXHRcdFx0XHRcdFx0XCJVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGxpc3QuXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWZvdW5kXCI6XG5cdFx0XHRcdFx0XHRcIk5vIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC4gUGxlYXNlIGNvbnNpZGVyIG1vZGlmeWluZyB0aGUgZmlsdGVyLlwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlczoge1xuXHRcdFx0XHRcdGNvbnRyb2w6IG51bGwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IG51bGwsXG5cdFx0XHRcdFx0ZW1wdHlPcHRpb25zOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmlsdGVyOiB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlOiBcIipcIixcblx0XHRcdFx0XHRtb2RlOiBGSUxURVJfTU9ERV9ESVNBQkxFRCxcblx0XHRcdFx0XHRwb3NpdGlvbjogRklMVEVSX1BPU0lUSU9OX0lOTElORSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRcdGJhZGdlOiBcIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeVwiLFxuXHRcdFx0XHRcdHN0YXR1c09yUmVtb3ZlQmFkZ2U6IFwiZW1wdHlcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHNlbGVjdG9yOiBcIipcIixcblx0XHRcdFx0XHRsYWJlbFRlbXBsYXRlOiBcIlwiLFxuXHRcdFx0XHRcdHZhbHVlVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0ZmlsdGVyOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGJ1aWxkU2VsZWN0aW9uTGFiZWwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlTWFwcGluZzoge1xuXHRcdFx0XHRcdC8qKiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1zZWxlY3RlZC10ZW1wbGF0ZWAgdGhlIHRlbXBsYXRlIGZvciB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgZGVmaW5lZC4gKi9cblx0XHRcdFx0XHRzZWxlY3RlZDogZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0XHRwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0bWlkZGxld2FyZTogW1wiZmxpcFwiLCBcIm9mZnNldDoxXCJdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHNlbGYpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbChzZWxmKTtcblxuXHRcdGNvbnN0IGxhenlMb2FkRmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIik7XG5cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsICYmICFsYXp5TG9hZEZsYWcpIHtcblx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0XHRuZXcgUHJvY2Vzc2luZygyMDAsICgpID0+IHtcblx0XHRcdFx0dGhpcy5mZXRjaCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwoc2VsZiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwoc2VsZiwgW10pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRsZXQgbGFzdFZhbHVlID0gc2VsZi52YWx1ZTtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobGFzdFZhbHVlICE9PSBuKSB7XG5cdFx0XHRcdFx0XHRsYXN0VmFsdWUgPSBuO1xuXHRcdFx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdC5jYWxsKHNlbGYsIG4pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5jbGljaygpIG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqIEBsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9ibHVyXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRibHVyRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiBubyB1cmwgaXMgc3BlY2lmaWVkLCB0aGUgb3B0aW9ucyBhcmUgdGFrZW4gZnJvbSB0aGUgQ29tcG9uZW50IGl0c2VsZi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmwgVVJMIHRvIGZldGNoIHRoZSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG5cdFx0XHR1cmwgPSB2YWxpZGF0ZVN0cmluZyh1cmwpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGZldGNoRGF0YS5jYWxsKHRoaXMsIHVybCkudGhlbigobWFwKSA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0aXNBcnJheShtYXApIHx8XG5cdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMuaW1wb3J0T3B0aW9ucyhtYXApO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sIDEwKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZVwiKSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0cGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KS5ydW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcG9ydCBTZWxlY3QgT3B0aW9ucyBmcm9tIGRhdGFzZXRcblx0ICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGNvbnRyb2wgZGVmYXVsdHMvb3B0aW9uc1xuXHQgKlxuXHQgKiBAc2luY2UgMC4xNi4wXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRpZiAoIWlzSXRlcmFibGUobWFwKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFwIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRtYXAuZm9yRWFjaCgobGFiZWwsIHZhbHVlKSA9PiB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEBkZXByZWNhdGVkIDIwMjQtMDEtMjEgKHlvdSBzaG91bGQgdXNlIGRhdGEtbW9uc3Rlci1vcHRpb24tLi4uKVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlXCIpO1xuXHRpZiAoaXNTdHJpbmcodGVtcGxhdGUpKSB7XG5cdFx0aWYgKCFvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdKSBvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdID0ge307XG5cblx0XHRzd2l0Y2ggKHRlbXBsYXRlKSB7XG5cdFx0XHRjYXNlIFwic3VtbWFyeVwiOlxuXHRcdFx0Y2FzZSBcImRlZmF1bHRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U3VtbWFyeVRlbXBsYXRlKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdGVkXCI6XG5cdFx0XHRcdG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl1bXCJzZWxlY3RlZFwiXSA9IGdldFNlbGVjdGlvblRlbXBsYXRlKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFwiaW52YWxpZCB0ZW1wbGF0ZSwgdXNlIHN1bW1hcnkgb3Igc2VsZWN0ZWRcIixcblx0XHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuc2VsZWN0ZWRcIj48L2Rpdj4gICAgXG48L2Rpdj5gO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwYXJzZVNsb3RzVG9PcHRpb25zKCkge1xuXHRsZXQgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKCFpc0l0ZXJhYmxlKG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IFtdO1xuXHR9XG5cblx0bGV0IGNvdW50ZXIgPSAxO1xuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBcImRpdlwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0bGV0IHZhbHVlID0gKGNvdW50ZXIrKykudG9TdHJpbmcoKTtcblx0XHRsZXQgdmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXZhbHVlXCIpKSB7XG5cdFx0XHR2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXZhbHVlXCIpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG5cdFx0XHR2aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbCA9IG5vZGUub3V0ZXJIVE1MO1xuXG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHZhbHVlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHR2aXNpYmlsaXR5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBvcHRpb25zLmxlbmd0aCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiB3YWl0IHVudGlsIGFsbCBvcHRpb25zIGFyZSBmaW5pc2hlZCByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtpbnR9IHRhcmdldExlbmd0aFxuICovXG5mdW5jdGlvbiBydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQodGFyZ2V0TGVuZ3RoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICghc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjYWxsYmFjayA9IGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0LCBvYnNlcnZlcikge1xuXHRcdGNvbnN0IHJ1biA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0Y29uc3QgcnVuID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1biA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3Qgbm9kZXMgPSBzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRgZGl2WyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG5vZGVzLmxlbmd0aCA9PT0gdGFyZ2V0TGVuZ3RoKSB7XG5cdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbChzZWxmKTtcblx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXSwge1xuXHRcdGF0dHJpYnV0ZXM6IGZhbHNlLFxuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG8gPSBvcHRpb25zPy5baV07XG5cdFx0aWYgKGlzT2JqZWN0KG8pICYmIG8/LltcInZhbHVlXCJdID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIG8/LltcImxhYmVsXCJdO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmUobykgJiYgbyA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBvO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB2YWx1ZSBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiZm9ybWF0dGVyLnNlbGVjdGlvblwiKTtcblx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0Y29uc3QgbGFiZWwgPSBjYWxsYmFjay5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAoaXNTdHJpbmcobGFiZWwpKSByZXR1cm4gbGFiZWw7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRyZXR1cm4gYCR7dmFsdWV9YDtcblx0fVxuXG5cdHJldHVybiB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jYW5ub3QtYmUtbG9hZGVkXCIsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93RG93blwiOlxuXHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHNlbGYudXBkYXRlSTE4bigpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdFx0c2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwoc2VsZik7XG5cdFx0XHR9KS5ydW4oKTtcblx0XHR9KSxcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMoXCJlblwiKS5hc3NpZ25UcmFuc2xhdGlvbnMoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIiwge30pLFxuXHQpO1xuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZG9jID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHR0cmFuc2xhdGlvbi5sb2NhbGUgPSBkb2MubG9jYWxlO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHJldHVybiB0cmFuc2xhdGlvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ3wqfVxuICovXG5mdW5jdGlvbiBzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQoKSB7XG5cdGNvbnN0IHRyYW5zbGF0aW9ucyA9IGdldERlZmF1bHRUcmFuc2xhdGlvbi5jYWxsKHRoaXMpO1xuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cblx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChcblx0XHRcInN1bW1hcnktdGV4dFwiLFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlcih7XG5cdFx0Y291bnQ6IFN0cmluZyhzZWxlY3Rpb25zLmxlbmd0aCksXG5cdH0pLmZvcm1hdCh0ZXh0KTtcblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnNlbGVjdGVkXCIsIHNlbGVjdGVkVGV4dCk7XG5cblx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiKTtcblx0Y29uc3QgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuc2VsZWN0LWFuLW9wdGlvblwiKTtcblxuXHRpZiAoXG5cdFx0Y3VycmVudCA9PT0gXCJcIiB8fFxuXHRcdGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGN1cnJlbnQgPT09IG1zZyB8fFxuXHRcdGN1cnJlbnQgPT09IG51bGxcblx0KSB7XG5cdFx0aWYgKHNlbGVjdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBcIlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Tm9kZUxpc3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbkVsZW1lbnRzKCkge1xuXHRyZXR1cm4gdGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzZWUgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwXG4gKi9cblxuLyoqXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgb3B0aW9ucyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCB2aXNpYmxlID0gMDtcblx0bGV0IG9wdGlvbkhlaWdodCA9IDA7XG5cdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwic2hvd01heE9wdGlvbnNcIiwgMTApO1xuXG5cdGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG5cdGZvciAoY29uc3QgWywgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG5cdFx0aWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIGNvbnRpbnVlO1xuXG5cdFx0bGV0IGggPSBvcHRpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXHRcdG9wdGlvbkhlaWdodCArPSBoO1xuXG5cdFx0dmlzaWJsZSsrO1xuXG5cdFx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0dmlzaWJsZSA9IG1heDtcblx0XHRzY3JvbGxGbGFnID0gdHJ1ZTtcblx0fVxuXG5cdGlmICh2aXNpYmxlID09PSAwKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcblx0XHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFx0XCJtZXNzYWdlcy5lbXB0eU9wdGlvbnNcIixcblx0XHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWZvdW5kXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVzID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSk7XG5cdGxldCBwYWRkaW5nID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXRvcFwiKSwgMTApO1xuXHRwYWRkaW5nICs9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTtcblxuXHRsZXQgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdG1hcmdpbiArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcblxuXHRjb25zdCBjb250YWluZXJIZWlnaHQgPSBvcHRpb25IZWlnaHQgKyBwYWRkaW5nICsgbWFyZ2luO1xuXHRjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGFpbmVySGVpZ2h0fXB4YDtcblxuXHRpZiAoc2Nyb2xsRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcblx0fVxuXG5cdGNvbnN0IGRvbVJlY3QgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYCR7ZG9tUmVjdC53aWR0aH1weGA7XG5cdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ggPSBcImF1dG9cIjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRpcmVjdGlvblxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gYWN0aXZhdGVDdXJyZW50T3B0aW9uKGRpcmVjdGlvbikge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgZm9jdXNlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRdYCk7XG5cblx0aWYgKFxuXHRcdCEoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fFxuXHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5dXCIpXG5cdCkge1xuXHRcdGZvciAoY29uc3QgWywgZV0gb2YgT2JqZWN0LmVudHJpZXMoXG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKSxcblx0XHQpKSB7XG5cdFx0XHRpZiAoZS5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGRpcmVjdGlvbiA9PT0gRk9DVVNfRElSRUNUSU9OX0RPV04pIHtcblx0XHRcdHdoaWxlIChmb2N1c2VkLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLm5leHRTaWJsaW5nO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKGZvY3VzZWQucHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLnByZXZpb3VzU2libGluZztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb25cIiAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIjpub3QoW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSlcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGlmIChmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApXG5cdFx0XHRcdC5mb3JFYWNoKChlKSA9PiB7XG5cdFx0XHRcdFx0ZS5yZW1vdmVBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRmb2N1c2VkLmZvY3VzKCk7XG5cdFx0XHRmb2N1c2VkLnNldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRgLCB0cnVlKTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGlvbnMoKSB7XG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cblx0XHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRcdGlmICh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRklMVEVSX1BPU0lUSU9OX1BPUFBFUjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0Zm9yIChjb25zdCBbaSwgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdFx0aWYgKG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke2l9LmZpbHRlcmVkYCwgXCJ0cnVlXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgKCkgPT4ge1xuXHRcdFx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bigpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIlRhYlwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlRmlsdGVyS2V5RXZlbnRzLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKlxuXG4gKi9cblxuLyoqXG4gKiBNZXRob2QgaGFuZGxlRmlsdGVyS2V5RXZlbnRzIGlzIHVzZWQgdG8gaGFuZGxlIGZpbHRlciBrZXkgZXZlbnRzLlxuICogRGVib3VuY2UgaXMgdXNlZCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgaGFuZGxlRmlsdGVyS2V5RXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcblx0aWYgKHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikgIT09IEZJTFRFUl9NT0RFX1JFTU9URSkge1xuXHRcdFx0ZmlsdGVyT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWx0ZXJGcm9tUmVtb3RlLmNhbGwodGhpcykuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRlbGV0ZSB0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRnJvbVJlbW90ZSgpIHtcblx0aWYgKCEodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG9wdGlvblVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIW9wdGlvblVybCkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcIk1pc3NpbmcgVVJMIGZvciBSZW1vdGUgRmlsdGVyLlwiLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjb25zdCBmaWx0ZXJWYWx1ZSA9IGVuY29kZVVSSShcblx0XHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKSxcblx0XHQpO1xuXHRcdGxldCB1cmwgPSBvcHRpb25Vcmw7XG5cdFx0aWYgKGZpbHRlclZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdHVybCA9IG5ldyBGb3JtYXR0ZXIoeyBmaWx0ZXI6IGZpbHRlclZhbHVlIH0pLmZvcm1hdChvcHRpb25VcmwpO1xuXHRcdH1cblxuXHRcdHRoaXMuZmV0Y2godXJsKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVudGVyXCI6XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXG5cdFx0XHRmaXJlRXZlbnQoZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpLCBcImNsaWNrXCIpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fVVApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdC8vIGhhbmRsZWQgYnkgdHJlZSBzZWxlY3Rcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0aWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlck1vZGUoKSB7XG5cdHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubW9kZVwiKSkge1xuXHRcdGNhc2UgRklMVEVSX01PREVfT1BUSU9OUzpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9PUFRJT05TO1xuXHRcdGNhc2UgRklMVEVSX01PREVfUkVNT1RFOlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX1JFTU9URTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX0RJU0FCTEVEO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmx1ckZpbHRlcigpIHtcblx0aWYgKCEodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblxuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uYmx1cigpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzUG9wcGVyRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cblx0aWYgKCEodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcIk1pc3NpbmcgUG9wcGVyIEZpbHRlciBFbGVtZW50LlwiLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gdmlzaWJpbGl0eSBpcyBzZXQgdG8gdmlzaWJsZSwgYmVjYXVzZSBmb2N1cygpIGRvZXMgbm90IHdvcmsgb24gaW52aXNpYmxlIGVsZW1lbnRzXG5cdC8vIGFuZCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhc3NpZ25lZCBsYXRlciBpbiB0aGUgcHJvY2Vzc2luZ1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoZm9jdXNPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZm9jdXNPcHRpb25zID09PSBudWxsKSB7XG5cdFx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoZm9jdXNPcHRpb25zKTtcblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNJbmxpbmVGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdGlmIChcblx0XHQoIWlzQXJyYXkob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApICYmXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubW9kZVwiKSAhPT0gRklMVEVSX01PREVfUkVNT1RFXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cblx0Ly8gdmlzaWJpbGl0eSBpcyBzZXQgdG8gdmlzaWJsZSwgYmVjYXVzZSBmb2N1cygpIGRvZXMgbm90IHdvcmsgb24gaW52aXNpYmxlIGVsZW1lbnRzXG5cdC8vIGFuZCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhc3NpZ25lZCBsYXRlciBpbiB0aGUgcHJvY2Vzc2luZ1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoZm9jdXNPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZm9jdXNPcHRpb25zID09PSBudWxsKSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoZm9jdXNPcHRpb25zKTtcblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9jdXNGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEKSB7XG5cdFx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikgPT09IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUpIHtcblx0XHRyZXR1cm4gZm9jdXNJbmxpbmVGaWx0ZXIuY2FsbCh0aGlzLCBmb2N1c09wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIGZvY3VzUG9wcGVyRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2F0aGVyU3RhdGUoKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBpbnB1dFt0eXBlPSR7dHlwZX1dOmNoZWNrZWRgLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgZSBvZiBlbGVtZW50cykge1xuXHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIGUudmFsdWUpLFxuXHRcdFx0dmFsdWU6IGUudmFsdWUsXG5cdFx0fSk7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBzZWxlY3Rpb24pXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdH0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlT25TZWxlY3RcIikgPT09IHRydWUpIHtcblx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHNldFNlbGVjdGlvblxuXHRcdC5jYWxsKHRoaXMsIFtdKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdCgpIHtcblx0Ly8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID0gMDtcblx0fVxuXG5cdGlmICh0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA+IDApIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXS0tO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0rKztcblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGlmIChcblx0XHRvcHRpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdCkge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlbXB0eVwiKTtcblxuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHQpIHtcblx0XHRcdG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNsaWNrLXRvLWxvYWQtb3B0aW9uc1wiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgbXNnKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgXCJcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnNcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHRcdH1cblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmIChcblx0XHRzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRzZWxlY3Rpb25zID09PSBudWxsIHx8XG5cdFx0c2VsZWN0aW9ucy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcIm1lc3NhZ2VzLmNvbnRyb2xcIixcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIiksXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwodGhpcykpO1xuXG5cdGxldCB1cGRhdGVkID0gZmFsc2U7XG5cdGxldCB2YWx1ZUNvdW50ZXIgPSAxO1xuXHRmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbj8udmlzaWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IGAke3ZhbHVlQ291bnRlcisrfWA7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbDtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi5sYWJlbCA9IG9wdGlvbi52YWx1ZTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXHR9XG5cblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcInN0YXR1c1wiKTtcblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uU3RhdGUoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dIGlucHV0YCxcblx0KTtcblxuXHRsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmICghaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0c2VsZWN0aW9uID0gW107XG5cdH1cblxuXHRjb25zdCBjaGVja2VkVmFsdWVzID0gc2VsZWN0aW9uLm1hcCgoYSkgPT4ge1xuXHRcdHJldHVybiBhLnZhbHVlO1xuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRpZiAoY2hlY2tlZFZhbHVlcy5pbmRleE9mKGUudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gdHJ1ZSkgZS5jaGVja2VkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gZmFsc2UpIGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uKHZhbHVlKSB7XG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR2YWx1ZSA9IHZhbHVlXG5cdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHQubWFwKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhLnRyaW0oKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhICE9PSBcIlwiO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCB2YWx1ZSksXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdiksXG5cdFx0XHRcdHZhbHVlOiB2LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB0eXBlXCIpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZWxlY3Rpb246IHNlbGVjdGlvbixcblx0XHR2YWx1ZTogdmFsdWUsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb252ZXJ0U2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb24pIHtcblx0Y29uc3QgdmFsdWUgPSBbXTtcblxuXHRpZiAoaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0Zm9yIChjb25zdCBvYmogb2Ygc2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCB2ID0gb2JqPy5bXCJ2YWx1ZVwiXTtcblx0XHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHZhbHVlLnB1c2godik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiB2YWx1ZS5wb3AoKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHthcnJheX0gc2VsZWN0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xuXHRpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgc2VsZWN0aW9uKTtcblx0XHRzZWxlY3Rpb24gPSByZXN1bHQ/LnNlbGVjdGlvbjtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJzZWxlY3Rpb25cIiwgdmFsaWRhdGVBcnJheShzZWxlY3Rpb24pKTtcblx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItc2VsZWN0ZWRcIiwge1xuXHRcdHNlbGVjdGlvbixcblx0fSk7XG5cblx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjb25zdCBDTEFTU05BTUUgPSBcInNlbGVjdGVkXCI7XG5cblx0XHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBub3RTZWxlY3RlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiOm5vdCg6Y2hlY2tlZClcIik7XG5cblx0XHRpZiAobm90U2VsZWN0ZWQpIHtcblx0XHRcdG5vdFNlbGVjdGVkLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NOQU1FKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpO1xuXHRcdGlmIChzZWxlY3RlZCkge1xuXHRcdFx0c2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LmFkZChDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKHVybCkge1xuXHRpZiAoIXVybCkgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3QgZmV0Y2hPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cdHVybCA9IG5ldyBGb3JtYXR0ZXIoeyBmaWx0ZXI6IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLmRlZmF1bHRWYWx1ZVwiKSB9KS5mb3JtYXQoXG5cdFx0dXJsLFxuXHQpO1xuXG5cdGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXHRyZXR1cm4gZ2xvYmFsXG5cdFx0LmZldGNoKHVybCwgZmV0Y2hPcHRpb25zKVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcblx0XHRcdGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24vanNvblwiKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgcmVzcG9uc2UgJHtjb250ZW50VHlwZX1gKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEpTT04ucGFyc2UoU3RyaW5nKHRleHQpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcIik7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJzdGF0dXNcIik7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblxuXHRjb25zdCBsYXp5TG9hZEZsYWcgPVxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIikgJiYgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlO1xuXG5cdGlmIChsYXp5TG9hZEZsYWcgPT09IHRydWUpIHtcblx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gPSB0cnVlO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmZldGNoKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwodGhpcywgW10pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHRcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0aWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwib3BlblwiKTtcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1zZWxlY3Rpb24tY2xlYXJlZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJhZGdlID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJiYWRnZVwiKTtcblx0XHRcdGlmIChiYWRnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYmFkZ2UuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dmFsdWVgKTtcblxuXHRcdFx0XHRsZXQgc2VsZWN0aW9uID0gc2VsZi5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5maWx0ZXIoKGIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgIT09IGIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldFNlbGVjdGlvblxuXHRcdFx0XHRcdC5jYWxsKHNlbGYsIHNlbGVjdGlvbilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSBzZWxmKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHNlbGYpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltpbnB1dEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb24tY29udHJvbFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VcIiwge1xuXHRcdFx0XHRcdHR5cGU6IGV2ZW50LnR5cGUsXG5cdFx0XHRcdFx0dmFsdWU6IGVsZW1lbnQudmFsdWUsXG5cdFx0XHRcdFx0Y2hlY2tlZDogZWxlbWVudC5jaGVja2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwiZmlsdGVyXCJcblx0XHRcdCkge1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGdhdGhlclN0YXRlLmNhbGwoc2VsZik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VkXCIsIGV2ZW50Py5kZXRhaWwpO1xuXHR9O1xuXG5cdHNlbGZba2V5RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aC5zaGlmdCgpO1xuXG5cdFx0bGV0IHJvbGU7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdHJvbGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHQvLyBmb2N1c0ZpbHRlci5jYWxsKHNlbGYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZSA9IGVsZW1lbnQuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9XWApO1xuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcImZpbHRlclwiOlxuXHRcdFx0XHRoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJ0b2dnbGVcIjpcblx0XHRcdFx0aGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCB0eXBlcyA9IHNlbGYuZ2V0T3B0aW9uKFwidG9nZ2xlRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKTtcblxuXHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVzKSkge1xuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwiY29udGFpbmVyXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0fSk7XG5cblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGVsZW1lbnQuY2xvc2VzdChcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbC5jbGFzc0xpc3QuY29udGFpbnMoXCJjbGVhclwiKSkge1xuXHRcdFx0XHRcdFx0XHRjbGVhclNlbGVjdGlvbi5jYWxsKHNlbGYpO1xuXG5cdFx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcIiwge30pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0Ly8gYmFkZ2UsIHNlbGVjdGlvblxuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtb25zdGVyLWNoYW5nZVwiLCBzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgc2VsZltrZXlFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcyhzdWdnZXN0aW9uKSB7XG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGNsZWFyQWxsRmxhZyA9XG5cdFx0XHRpc0FycmF5KHNlbGVjdGlvbikgJiZcblx0XHRcdHNlbGVjdGlvbi5sZW5ndGggPiAwICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsZWFyQWxsXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIpO1xuXG5cdFx0aWYgKGNsZWFyQWxsRmxhZykge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiY2xlYXJcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzdWdnZXN0aW9uID09PSBcImxvYWRpbmdcIikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwib3BlblwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwib3BlblwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGlmIChcblx0XHRcdG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdFx0KSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlbXB0eVwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZW1wdHlcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24pIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBzdWdnZXN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIHN1Z2dlc3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fSwgMik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tzZWxlY3Rpb25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c2VsZWN0aW9uXWAsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwiaW5saW5lLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cInBvcHBlci1maWx0ZXJcIl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdID1cblx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnBhcmVudEVsZW1lbnQ7XG5cdHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25zXWAsXG5cdCk7XG5cdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwibm8tb3B0aW9uc1wiXWAsXG5cdCk7XG5cdHRoaXNbc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHRcdCk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWZpbHRlcmVkIHBhdGg6b3B0aW9ucy5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHlcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucyB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgIG5hbWUgcGF0aDpuYW1lLCBcbiAgICAgICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgcHJlZml4Om9wdGlvbi0gfCBzdWZmaXg6IGZvcm0sXG4gICAgICAgICAgICBjbGFzcyBwYXRoOm9wdGlvbnMuY2xhc3MgXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm9wdGlvbnMgfCBpbmRleDpsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNlbGVjdCk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7UG9wcGVyU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBQb3BwZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHBvcHBlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogVGhpcyBhY3Rpb24gY2FsbGJhY2sgZXhlY3V0ZXMgdGhlIGFjdGlvbnMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RXZlbnR9IGUgRXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGUgUG9wcGVyIGlzdCBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhIHBvcHBlci5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3BvcHBlci5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXInKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXI+PC9tb25zdGVyLXBvcHBlcj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlcn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlcicpO1xuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3BvcHBlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlIC0gVGhlIG1vZGUgb2YgdGhlIHBvcHBlci4gUG9zc2libGUgdmFsdWVzIGFyZSBgY2xpY2tgLCBgZW50ZXJgIGBob3ZlcmAsIGBtYW51YWxgLCBgZm9jdXNgLCBcImF1dG9cIiBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZW0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQgLSBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAgYW5kIGByaWdodGAuXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXk8ZnVuY3Rpb24+fSBwb3BwZXIubWlkZGxld2FyZSAtIFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge0FycmF5PGZ1bmN0aW9uPn0gcG9wcGVyLm1pZGRsZXdhcmVJbml0IC0gVGhlIG1pZGRsZXdhcmUgaW5pdCBmdW5jdGlvbnMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIC0gVGhlIGZlYXR1cmVzIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucHJldmVudFByb3BhZ2F0ZU9wZW5FdmVudHMgLSBQcmV2ZW50cyB0aGUgb3BlbiBldmVudCBmcm9tIGJlaW5nIHNlbnQuXG5cdCAqIEBleHRlbmRzIHtCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImhvdmVyIGZvY3VzXCIsXG5cdFx0XHRjb250ZW50OiBcIjxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PlwiLFxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcIm9mZnNldDoxMFwiLCBcImFycm93XCJdLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdHByZXZlbnRPcGVuRXZlbnRTZW50OiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BvcHBlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRtb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBtb2RlXSBvZiBPYmplY3QuZW50cmllcyhtb2RlcykpIHtcblx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1vZGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImZvY3VzXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImNsaWNrXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbnRlclwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJhdXRvXCI6IC8vIGlzIGhvdmVyXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RlICR7bW9kZX1gKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRlXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGRlblwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgUG9wcGVyQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5cIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cdHVwZGF0ZVBvcHBlci5jYWxsKHNlbGYpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5lZFwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj48L3Nsb3Q+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtQb3BwZXJCdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFBvcHBlckJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgcG9wcGVyYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpmaWxsLWF2YWlsYWJsZX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgXCIuL2J1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEB0aGlzIHtDdXN0b21Db250cm9sfVxuICovXG5cbi8qKlxuICogVGhlIFBvcHBlckJ1dHRvbiBpcyBhIGJ1dHRvbiB0aGF0IG9wZW5zIGEgcG9wcGVyIGVsZW1lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9wb3BwZXItYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1wb3BwZXItYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXItYnV0dG9uPjwvbW9uc3Rlci1wb3BwZXItYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7UG9wcGVyQnV0dG9ufSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvcG9wcGVyLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jbGFzc2VzLWJ1dHRvbmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gUG9wcGVyXG4gKiBQb3BwZXIgPHwtLSBQb3BwZXJCdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgcG9wcGVyIGJ1dHRvblxuICovXG5jbGFzcyBQb3BwZXJCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBsYWJlbHMgLSBUaGUgbGFiZWxzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b24gLSBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQGV4dGVuZHMge0J1dHRvbi5kZWZhdWx0c31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6IChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvblwiLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJjbGlja1wiLFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChQb3BwZXJCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblxuXHR0aGlzW2Fycm93RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWFycm93XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQb3BwZXJCdXR0b24pO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0NvbmZpcm1CdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWRlY2lzaW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bWFyZ2luOjFyZW0gMCAuNHJlbTt3aWR0aDoxMDAlfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7TWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG1lc3NhZ2VzdGF0ZWJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL21lc3NhZ2Utc3RhdGUtYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj48L21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBtZXNzYWdlLXN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAyLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc3RhdGUgYnV0dG9uIHdpdGggaWNvbnMgYW5kIGEgbWVzc2FnZVxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRyZW1vdmVTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5yZW1vdmVTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmdldFN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNldE1lc3NhZ2UobWVzc2FnZSwgdGl0bGUsIGljb24pIHtcblx0XHRpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcblx0XHRcdGlmIChtZXNzYWdlID09PSBcIlwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXNzYWdlIG11c3Qgbm90IGJlIGVtcHR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCB0aXRsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHR0aXRsZURpdi5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZVwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpY29uID0gdmFsaWRhdGVTdHJpbmcoaWNvbik7XG5cdFx0XHRcdGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LmlubmVySFRNTCA9IGljb247XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS1pY29uXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZChpY29uRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2VEaXYuaW5uZXJIVE1MID0gbWVzc2FnZTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aXRsZURpdik7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQobWVzc2FnZURpdik7XG5cblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIGNvbnRhaW5lckRpdik7XG5cdFx0fSBlbHNlIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIG1lc3NhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcIm1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0aGlkZU1lc3NhZ2UoKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkNvbmZpcm1CdXR0b259XG5cdCAqL1xuXHRzZXRDb25maXJtQnV0dG9uU3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGFuZCBzaG93IHRoZSBjb25maXJtIGJ1dHRvbiBtZXNzYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSB9O1xuXG4vKipcbiAqIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHBhc3NlZCB0byBhIGRhdGFzb3VyY2UgYW5kIGlzIHVzZWQgdG8gYWRhcHQgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxEYXRhU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9AQGRhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIGRhdGFzb3VyY2UgY2xhc3MgaXMgdGhlIGJhc2lzIGZvciBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGRhdGEgc291cmNlcy5cbiAqIEl0IHByb3ZpZGVzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBkYXRhXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHN1bW1hcnkgVGhlIGRhdGFzb3VyY2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBEYXRhc291cmNlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGVzIGEgbmV3IGRhdGFzb3VyY2Vcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cyksXG5cdFx0fSk7XG5cblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBhbmQgZXh0ZW5kIHRoaXMgbWV0aG9kIGFzIGZvbGxvd3MuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBnZXQgZGVmYXVsdHMoKSB7XG5cdCAqICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgbXlWYWx1ZTp0cnVlXG5cdCAqICAgIH0pO1xuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgb3B0aW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0c2V0T3B0aW9ucyhvcHRpb25zKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cdFx0ZXh0ZW5kKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHJlYWwgb2JqZWN0XG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdHxBcnJheX1cblx0ICovXG5cdGdldCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGRhdGFcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldChkYXRhKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLnNldFN1YmplY3QoZGF0YSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRpZiAoaXNTdHJpbmcoZGF0YSkpIHtcblx0XHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHtkYXRhfSkuYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vcGlwZS5tanNcIjtcblxuZXhwb3J0IHsgU2VydmVyIH07XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHNlcnZlciBkYXRhIHNvdXJjZXNcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlci5cblx0ICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHR0cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcInJlYWRcIiwgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBkYXRhUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5wYXRoXCIpO1xuXHRcdGlmIChkYXRhUGF0aCkge1xuXHRcdFx0cGF5bG9hZCA9IG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLmdldFZpYShkYXRhUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSBmb3Igd3JpdGluZyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblxuXHRcdGNvbnN0IHNoZWF0aGluZ09iamVjdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLm9iamVjdFwiKTtcblx0XHRjb25zdCBzaGVhdGhpbmdQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcucGF0aFwiKTtcblxuXHRcdGlmIChzaGVhdGhpbmdPYmplY3QgJiYgc2hlYXRoaW5nUGF0aCkge1xuXHRcdFx0Y29uc3Qgc3ViID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSBzaGVhdGhpbmdPYmplY3Q7XG5cdFx0XHRuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5zZXRWaWEoc2hlYXRoaW5nUGF0aCwgc3ViKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNhbGxiYWNrc1trZXldID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhrZXksIGNhbGxiYWNrc1trZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9iaiA9IHBpcGUucnVuKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXIuUmVzdEFQSVxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBXcml0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICogQHBhcmFtIHtPYmplY3R9IHZhbGlkYXRpb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB2YWxpZGF0aW9uKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0XHR2YWxpZGF0aW9uOiB2YWxpZGF0aW9uLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFGZXRjaEVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40My4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlci5SZXN0QVBJXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIERhdGFGZXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcbmltcG9ydCB7IFdyaXRlRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL3dyaXRlZXJyb3IubWpzXCI7XG5pbXBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9IGZyb20gXCIuL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanNcIjtcblxuZXhwb3J0IHsgUmVzdEFQSSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3RlclxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXJcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGlcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQ9e30gQW4gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuIFRoZSBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0fFJlcXVlc3QgY29uc3RydWN0b3J9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5pbml0Lm1ldGhvZD1QT1NUXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0LmhlYWRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBoZWFkZXJzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5yZXNwb25zZUNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmFjY2VwdGVkU3RhdHVzPVsyMDAsMjAxXVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucmVwb3J0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5yZXBvcnQucGF0aCBQYXRoIHRvIHZhbGlkYXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVhZC5pbml0Lm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuYWNjZXB0ZWRTdGF0dXM9WzIwMF1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwLCAyMDFdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwb3J0OiB7XG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0aW5pdDoge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMF0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLmluaXRcIik7XG5cdFx0aWYgKCFpc09iamVjdChpbml0KSkgaW5pdCA9IHt9O1xuXHRcdGlmICghaW5pdFtcIm1ldGhvZFwiXSkgaW5pdFtcIm1ldGhvZFwiXSA9IFwiR0VUXCI7XG5cblx0XHRsZXQgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcInJlYWQucmVzcG9uc2VDYWxsYmFja1wiKTtcblx0XHRpZiAoIWNhbGxiYWNrKVxuXHRcdFx0Y2FsbGJhY2sgPSAob2JqKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0KHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaikpO1xuXHRcdFx0fTtcblxuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcInJlYWRcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge1dyaXRlRXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRsZXQgaW5pdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKHR5cGVvZiBpbml0W1wiaGVhZGVyc1wiXSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0aW5pdFtcImhlYWRlcnNcIl0gPSB7XG5cdFx0XHRcdFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJQT1NUXCI7XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdGluaXRbXCJib2R5XCJdID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcIndyaXRlXCIsIGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXN0QVBJKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ucmVhZCxcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLndyaXRlLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGluaXRcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKGluaXQsIGtleSwgY2FsbGJhY2spIHtcblx0bGV0IHJlc3BvbnNlO1xuXG5cdHJldHVybiBmZXRjaCh0aGlzLmdldE9wdGlvbihgJHtrZXl9LnVybGApLCBpbml0KVxuXHRcdC50aGVuKChyZXNwKSA9PiB7XG5cdFx0XHRyZXNwb25zZSA9IHJlc3A7XG5cblx0XHRcdGNvbnN0IGFjY2VwdGVkU3RhdHVzID0gdGhpcy5nZXRPcHRpb24oYCR7a2V5fS5hY2NlcHRlZFN0YXR1c2AsIFsyMDBdKTtcblxuXHRcdFx0aWYgKGFjY2VwdGVkU3RhdHVzLmluZGV4T2YocmVzcC5zdGF0dXMpID09PSAtMSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZhYmxlIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIGBRdWV1ZS5hZGQoKWAgYW5kIGBRdWV1ZS5jbGVhcigpYCBub3RpZnkgYWxsIG9ic2VydmVycy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcXVldWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBbiBvYnNlcnZhYmxlIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBPYnNlcnZhYmxlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdG9ic2VydmVyczogbmV3IE9ic2VydmVyTGlzdCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbmNvbnN0IGRhdGFTeW1ib2wgPSBTeW1ib2woXCJAQGRhdGFcIik7XG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5OZXQuV2ViU29ja2V0XG4gKiBAc3VtbWFyeSBUaGUgTWVzc2FnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRhdGEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZGF0YVN5bWJvbF0gPSB2YWxpZGF0ZU9iamVjdChkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByYXcgbWVzc2FnZS5cblx0ICpcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGpzb25cblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzdGF0aWMgZnJvbUpTT04oanNvbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGpzb24pO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShKU09OLnBhcnNlKGpzb24pKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyLCBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVjZWl2ZVF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicmVjZWl2ZVF1ZXVlXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2VuZFF1ZXVlU3ltYm9sID0gU3ltYm9sKFwic2VuZFF1ZXVlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCBjb25uZWN0aW9uU3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFudWFsQ2xvc2VTeW1ib2wgPSBTeW1ib2woXCJtYW51YWxDbG9zZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TdGF0dXNDb2RlID0ge1xuXHQxMDAwOiBcIk5vcm1hbCBjbG9zdXJlXCIsXG5cdDEwMDE6IFwiR29pbmcgYXdheVwiLFxuXHQxMDAyOiBcIlByb3RvY29sIGVycm9yXCIsXG5cdDEwMDM6IFwiVW5zdXBwb3J0ZWQgZGF0YVwiLFxuXHQxMDA0OiBcIlJlc2VydmVkXCIsXG5cdDEwMDU6IFwiTm8gc3RhdHVzIGNvZGVcIixcblx0MTAwNjogXCJDb25uZWN0aW9uIGNsb3NlZCBhYm5vcm1hbGx5XCIsXG5cdDEwMDc6IFwiSW52YWxpZCBmcmFtZSBwYXlsb2FkIGRhdGFcIixcblx0MTAwODogXCJQb2xpY3kgdmlvbGF0aW9uXCIsXG5cdDEwMDk6IFwiTWVzc2FnZSB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYmNvbm5lY3QuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBwcm9taXNlQWxscmVkeVJlc29sdmVkID0gZmFsc2U7XG5cblx0bGV0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKGNvbm5lY3Rpb25UaW1lb3V0KSB8fCBjb25uZWN0aW9uVGltZW91dCA8IDEwMCkge1xuXHRcdGNvbm5lY3Rpb25UaW1lb3V0ID0gNTAwMDtcblx0fVxuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHRpbWVvdXRcIikpO1xuXHR9LCBjb25uZWN0aW9uVGltZW91dCk7XG5cblx0bGV0IHJlY29ubmVjdFRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdFRpbWVvdXQpIHx8IHJlY29ubmVjdFRpbWVvdXQgPCAxMDAwKVxuXHRcdHJlY29ubmVjdFRpbWVvdXQgPSAxMDAwO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RBdHRlbXB0cykgfHwgcmVjb25uZWN0QXR0ZW1wdHMgPCAxKVxuXHRcdHJlY29ubmVjdEF0dGVtcHRzID0gMTtcblx0bGV0IHJlY29ubmVjdEVuYWJsZWQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWRcIik7XG5cdGlmIChyZWNvbm5lY3RFbmFibGVkICE9PSB0cnVlKSByZWNvbm5lY3RFbmFibGVkID0gZmFsc2U7XG5cblx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKys7XG5cblx0aWYgKFxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ICYmXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQucmVhZHlTdGF0ZSA8IDJcblx0KSB7XG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UoKTtcblx0fVxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwpO1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQobmV3IE1lc3NhZ2UocmVhZGVyLnJlc3VsdCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZWFkZXIucmVhZEFzVGV4dChuZXcgTWVzc2FnZShldmVudC5kYXRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQoTWVzc2FnZS5mcm9tSlNPTihldmVudC5kYXRhKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdGlmICh0eXBlb2YgcmVzb2x2ZSA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRwcm9taXNlQWxscmVkeVJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoc2VsZlttYW51YWxDbG9zZVN5bWJvbF0pIHtcblx0XHRcdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvbmV0L3dlYmNvbm5lY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLk5ldFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29ubmVjdFNlcnZlci5jYWxsKHRoaXMsIHJlc29sdmUsIHJlamVjdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tjb25uZWN0aW9uU3ltYm9sXT8uc29ja2V0Py5yZWFkeVN0YXRlID09PSAxO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcblx0ICovXG5cdGNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbikge1xuXHRcdGlmICghaXNJbnRlZ2VyKHN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPCAxMDAwIHx8IHN0YXR1c0NvZGUgPiA0OTk5KSB7XG5cdFx0XHRzdGF0dXNDb2RlID0gMTAwMDtcblx0XHR9XG5cdFx0aWYgKCFpc1N0cmluZyhyZWFzb24pKSB7XG5cdFx0XHRyZWFzb24gPSBcIlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCkge1xuXHRcdFx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUG9sbHMgdGhlIHJlY2VpdmUgcXVldWUgZm9yIG5ldyBtZXNzYWdlcy5cblx0ICpcblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0ucG9sbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFyZSB0aGVyZSBhbnkgbWVzc2FnZXMgaW4gdGhlIHJlY2VpdmUgcXVldWU/XG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wZWVrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlfE9iamVjdH0gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0c2VuZChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlICE9PSAxKSB7XG5cdFx0XHRcdHJlamVjdChcInRoZSBzb2NrZXQgaXMgbm90IHJlYWR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFdlYkNvbm5lY3QgYXMgTmV0V2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqXG4gKiBoaW50OiB0aGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUgdGVzdHMuIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBpdCwgcGxlYXNlIGNoYW5nZSBpdCBpbiB0aGUgdGVzdHMgYXMgd2VsbC5cbiAqL1xuY29uc3Qgd2ViQ29ubmVjdFN5bWJvbCA9IFN5bWJvbChcImNvbm5lY3Rpb25cIik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlclxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfTtcblx0XHR9XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSBvcHRpb25zID0ge307XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0gPSBuZXcgTmV0V2ViQ29ubmVjdCh7XG5cdFx0XHR1cmw6IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpLFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKSxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNvbm5lY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQucGF0aCBQYXRoIHRvIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5kYXRhUmVjZWl2ZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRsZXQgb2JqID0gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5wb2xsKCk7XG5cdFx0XHRcdGlmICghaXNPYmplY3Qob2JqKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYW4gb2JqZWN0LlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEob2JqIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGEgTWVzc2FnZS5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iaiA9IG9iai5nZXREYXRhKCk7XG5cdFx0XHRcdG9iaiA9IHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaik7XG5cdFx0XHRcdHRoaXMuc2V0KG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUodGhpcy5nZXQoKSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uc2VuZChvYmopO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFdlYkNvbm5lY3QodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7ZXh0ZXJuYWw6bG9jYWxTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJsb2NhbFN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGNsb25lXG5cdCAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxTdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBTZXNzaW9uU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpzZXNzaW9uU3RvcmFnZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KFwic2Vzc2lvblN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIENsb25lXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Nlc3Npb25TdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7Rm9ybVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGZvcm0geyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItZm9ybXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubW9uc3Rlci1mb3JtIGxhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmdyaWR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbH5maWVsZHNldCwubW9uc3Rlci1mb3JtIGxhYmVsfmxhYmVse21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBvcHRpb246Y2hlY2tlZCwubW9uc3Rlci1mb3JtIG9wdGlvbjpmb2N1cywubW9uc3Rlci1mb3JtIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JvcmRlcjowO2JvcmRlci1ib3R0b20tcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1ib3R0b206dGhpbiB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGluO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsLC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGxhYmVsIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwgc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwgdGV4dGFyZWEsLm1vbnN0ZXItZm9ybSBsYWJlbCtpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsK3NlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsK3RleHRhcmVhe21hcmdpbi10b3A6LjJyZW07d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6Mi41cmVtIDJyZW0gMnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXQgbGVnZW5ke2ZvbnQtc2l6ZTouOHJlbTttYXgtd2lkdGg6OTUlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4xcmVtIDJyZW0gLjJyZW0gLjVyZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDowO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0fmZpZWxkc2V0e21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbnttYXJnaW46LjJyZW0gMH0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbToxcmVtfS5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOm5vbmV9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpob3ZlciwubW9uc3Rlci1mb3JtIGlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLC5tb25zdGVyLWZvcm0gc2VsZWN0OmhvdmVyLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFJlc3RBUEkgfSBmcm9tIFwiLi4vLi4vZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH0gZnJvbSBcIi4vbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU3RhdGVCdXR0b24gfSBmcm9tIFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBGb3JtU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZm9ybS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMy4xLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQUNUSU9OID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlLWFjdGlvbmA7XG5cbi8qKlxuICogRm9ybSBkYXRhIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZm9ybSBkYXRhXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAc2luY2UgMS43LjBcbiAqL1xuY29uc3QgZm9ybURhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2Zvcm1AQGZvcm1kYXRhXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQHNpbmNlIDIuOC4wXG4gKi9cbmNvbnN0IGZvcm1EYXRhVXBkYXRlclN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vZm9ybUBAZm9ybWRhdGEtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQHNpbmNlIDEuNy4wXG4gKi9cbmNvbnN0IGZvcm1FbGVtZW50U3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9mb3JtQEBmb3JtLWVsZW1lbnRcIixcbik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAc2luY2UgMi41LjBcbiAqL1xuY29uc3QgcmVnaXN0ZXJlZERhdGFzb3VyY2VzU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9mb3JtQEByZWdpc3RlcmVkLWRhdGFzb3VyY2VzXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS43LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFBST1BFUlRZX1ZBTElEQVRJT05fS0VZID0gXCJfX3ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGZvcm0gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvZm9ybS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnkuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItZm9ybSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1mb3JtJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItZm9ybT48L21vbnN0ZXItZm9ybT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0Zvcm19IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9mb3JtLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZm9ybScpO1xuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGZvcm0ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBGb3JtXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIGNvbmZpZ3VyYWJsZSBmb3JtIGNvbnRyb2xcbiAqL1xuY2xhc3MgRm9ybSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uLlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vZm9ybVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge0RhdGFzb3VyY2V9IGRhdGFzb3VyY2UgZGF0YSBzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlcG9ydFZhbGlkaXR5XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXBvcnRWYWxpZGl0eS5zZWxlY3RvciB3aGljaCBlbGVtZW50IHNob3VsZCBiZSB1c2VkIHRvIHJlcG9ydCB0aGUgdmFsaWRpdHlcblx0ICogQHByb3BlcnR5IHtmdW5jdGlvbn0gcmVwb3J0VmFsaWRpdHkuZXJyb3JIYW5kbGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Jcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uIGNsYXNzIGZvciB0aGUgZm9ybVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YXNvdXJjZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZXBvcnRWYWxpZGl0eToge1xuXHRcdFx0XHRcdHNlbGVjdG9yOiBcImlucHV0LHNlbGVjdCx0ZXh0YXJlYVwiLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlcjogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0Zm9ybTogXCJtb25zdGVyLWZvcm1cIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIHNldHVwIGNvZGUsIHN1Y2ggYXNcblx0ICogZmV0Y2hpbmcgcmVzb3VyY2VzIG9yIHJlbmRlcmluZy4gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHRyeSB0byBkZWxheSB3b3JrIHVudGlsIHRoaXMgdGltZS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyW1wiY29ubmVjdGVkQ2FsbGJhY2tcIl0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmVmcmVzaCBtZXRob2QgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBhZnRlciBhIGNoYW5nZSB3aXRoIGZyZXNoIGRhdGEuXG5cdCAqXG5cdCAqIFRoZXJlZm9yZSwgdGhlIGRhdGEgc291cmNlIGlzIGNhbGxlZCBhZ2FpbiBhbmQgdGhlIGRhdGEgaXMgdXBkYXRlZC5cblx0ICpcblx0ICogSWYgeW91IGhhdmUgdXBkYXRlZCB0aGUgZGF0YSBzb3VyY2Ugd2l0aCBgc2V0T3B0aW9uKCdkYXRhc291cmNlJyxkYXRhc291cmNlKSwgeW91IG11c3QgY2FsbCB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHJldHVybiB7Rm9ybX1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBkYXRhc291cmNlXG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQsIFwiXCIpO1xuXHRcdFx0Y29uc3QgZGF0YXNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiKTtcblxuXHRcdFx0aWYgKCEoZGF0YXNvdXJjZSBpbnN0YW5jZW9mIERhdGFzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBkYXRhc291cmNlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YXNvdXJjZVxuXHRcdFx0XHQucmVhZCgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2Zvcm1EYXRhU3ltYm9sXS5zZXRTdWJqZWN0KGRhdGFzb3VyY2UuZ2V0KCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0XHR9KS5ydW4oKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdERhdGFzb3VyY2UuY2FsbCh0aGlzKTtcblx0XHRpbml0VXBkYXRlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRPYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldFZhbHVlcygpIHtcblx0XHRyZXR1cm4gdGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0U3ViamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1mb3JtXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldH1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbRm9ybVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0c3RhdGljIFtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdID0gbmV3IE1hcChbXG5cdFx0W1wicmVzdGFwaVwiLCBSZXN0QVBJXSxcblx0XHRbXCJsb2NhbHN0b3JhZ2VcIiwgTG9jYWxTdG9yYWdlXSxcblx0XHRbXCJzZXNzaW9uc3RvcmFnZVwiLCBTZXNzaW9uU3RvcmFnZV0sXG5cdFx0W1wid2ViY29ubmVjdFwiLCBXZWJDb25uZWN0XSxcblx0XSk7XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgbmV3IGRhdGFzb3VyY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX0gZGF0YXNvdXJjZVxuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVyRGF0YXNvdXJjZShuYW1lLCBkYXRhc291cmNlKSB7XG5cdFx0Rm9ybVtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdLnNldChuYW1lLCBkYXRhc291cmNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnJlZ2lzdGVyIGEgcmVnaXN0ZXJlZCBkYXRhc291cmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqL1xuXHRzdGF0aWMgdW5yZWdpc3RlckRhdGFzb3VyY2UobmFtZSkge1xuXHRcdEZvcm1bcmVnaXN0ZXJlZERhdGFzb3VyY2VzU3ltYm9sXS5kZWxldGUobmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHJlZ2lzdGVyZWQgZGF0YSBzb3VyY2VzXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdHN0YXRpYyBnZXREYXRhc291cmNlcygpIHtcblx0XHRyZXR1cm4gRm9ybVtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biByZXBvcnRWYWxpZGF0aW9uIG9uIGFsbCBjaGlsZCBodG1sIGZvcm0gY29udHJvbHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAyLjEwLjBcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlcG9ydFZhbGlkaXR5LnNlbGVjdG9yXCIpO1xuXHRcdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuXHRcdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmICh0eXBlb2Ygbm9kZS5yZXBvcnRWYWxpZGl0eSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGlmIChub2RlLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFVwZGF0ZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1dLFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dLFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVH1dYDtcblx0XHRcdGNvbnN0IGNvbnRyb2xzID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0Y29uc3QgbGlzdCA9IG5ldyBTZXQoWy4uLmNvbnRyb2xzXSk7XG5cblx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdGxpc3QuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGlzdC5zaXplID09PSAwKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKFxuXHRcdFx0XHRub2RlLFxuXHRcdFx0XHRsaXN0LFxuXHRcdFx0XHRmb3JtRGF0YVVwZGF0ZXJTeW1ib2wsXG5cdFx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RGF0YXNvdXJjZSgpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQUNUSU9OfT13cml0ZV1gO1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRjb25zdCBsaXN0ID0gbmV3IFNldChbLi4uY29udHJvbHNdKTtcblxuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0bGlzdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsaXN0LnNpemUgPT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGluaXRXcml0ZUFjdGlvbnMuY2FsbCh0aGlzLCBsaXN0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGluaXRXcml0ZUFjdGlvbnMoZWxlbWVudHMpIHtcblx0ZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcblx0XHRcdFx0cnVuV3JpdGVDYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGcgPSBlbGVtZW50Py5nZXRPcHRpb247XG5cdFx0XHRpZiAoIWlzRnVuY3Rpb24oZykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzID0gZWxlbWVudD8uc2V0T3B0aW9uO1xuXHRcdFx0aWYgKCFpc0Z1bmN0aW9uKHMpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZm4gPSBlbGVtZW50LmdldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIik7XG5cblx0XHRcdGlmICghaXNGdW5jdGlvbihmbikpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkaXNhYmxlIGNvbnNvbGUubG9nIG9mIHN0YW5kYXJkIGNsaWNrIGV2ZW50XG5cdFx0XHRlbGVtZW50LnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBkbyBub3RoaW5nIVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcnVuV3JpdGVDYWxsYmFjayhidXR0b24pIHtcblx0aWYgKHR5cGVvZiB0aGlzLnJlcG9ydFZhbGlkaXR5ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRpZiAodGhpcy5yZXBvcnRWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBTdGF0ZUJ1dHRvbiB8fFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBNZXNzYWdlU3RhdGVCdXR0b25cblx0XHRcdCkge1xuXHRcdFx0XHRidXR0b24uc2V0U3RhdGUoXCJmYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YXNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiKTtcblx0aWYgKCEoZGF0YXNvdXJjZSBpbnN0YW5jZW9mIERhdGFzb3VyY2UpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIFN0YXRlQnV0dG9uIHx8IGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvbikge1xuXHRcdGJ1dHRvbi5zZXRTdGF0ZShcImFjdGl2aXR5XCIpO1xuXHR9XG5cblx0Ly9jb25zdCBkYXRhID0gZm9ybT8uW2Zvcm1EYXRhU3ltYm9sXT8uZ2V0UmVhbFN1YmplY3QoKTtcblx0Y29uc3Qgd3JpdGVQcm9taXNlID0gZGF0YXNvdXJjZVxuXHRcdC5zZXQodGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKSlcblx0XHQud3JpdGUoKTtcblx0aWYgKCEod3JpdGVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhc291cmNlLndyaXRlKCkgbXVzdCByZXR1cm4gYSBwcm9taXNlXCIpO1xuXHR9XG5cblx0d3JpdGVQcm9taXNlXG5cdFx0LnRoZW4oKHIpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgU3RhdGVCdXR0b24gfHxcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgTWVzc2FnZVN0YXRlQnV0dG9uXG5cdFx0XHQpIHtcblx0XHRcdFx0YnV0dG9uLnNldFN0YXRlKFwic3VjY2Vzc2Z1bFwiKTtcblx0XHRcdH1cblx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLmdldFN1YmplY3QoKVtQUk9QRVJUWV9WQUxJREFUSU9OX0tFWV0gPSB7fTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBXcml0ZUVycm9yKSB7XG5cdFx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLmdldFN1YmplY3QoKVtQUk9QRVJUWV9WQUxJREFUSU9OX0tFWV0gPVxuXHRcdFx0XHRcdGUuZ2V0VmFsaWRhdGlvbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIFN0YXRlQnV0dG9uIHx8XG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRTdGF0ZShcImZhaWxlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvbikge1xuXHRcdFx0XHRidXR0b24uc2V0TWVzc2FnZShlLm1lc3NhZ2UpO1xuXHRcdFx0XHRidXR0b24uc2hvd01lc3NhZ2UoKTtcblx0XHRcdH1cblx0XHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItZm9ybSBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZT1cInJlc3RhcGk6Li4uLi5cIj48L21vbnN0ZXItZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IGRhdGFzb3VyY2UgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFKTtcblx0aWYgKGlzU3RyaW5nKGRhdGFzb3VyY2UpKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCBjbGFzc09iamVjdF0gb2YgRm9ybS5nZXREYXRhc291cmNlcygpKSB7XG5cdFx0XHRpZiAoZGF0YXNvdXJjZSA9PT0ga2V5KSB7XG5cdFx0XHRcdGxldCBhcmdzID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJncyA9IEpTT04ucGFyc2UoYXJncyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRvcHRpb25zW1wiZGF0YXNvdXJjZVwiXSA9IG5ldyBjbGFzc09iamVjdChhcmdzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbnNbXCJkYXRhc291cmNlXCJdIGluc3RhbmNlb2YgRGF0YXNvdXJjZSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgRm9ybVxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGF0YXNvdXJjZSA9IG51bGw7XG5cdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBkYXRhc291cmNlID0gc2VsZi5nZXRPcHRpb24oXCJkYXRhc291cmNlXCIpO1xuXHRcdFx0aWYgKGRhdGFzb3VyY2UgIT09IGxhc3REYXRhc291cmNlKSB7XG5cdFx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHNlbGYucmVmcmVzaCgpO1xuXHRcdFx0XHR9KS5ydW4oKTtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xuXHRcdH0pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbZm9ybUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9ybV1cIixcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgIGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5mb3JtXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICBwYXJ0PVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEZvcm0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlTGlzdCBjbGFzc1xuICovXG5jbGFzcyBOb2RlTGlzdCBleHRlbmRzIFNldCB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaW52YWxpZCB2YWx1ZSB0eXBlXG5cdCAqIEBwYXJhbSB7Tm9kZUxpc3R8Tm9kZXxBcnJheTxOb2RlPn12YWx1ZXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHZhbHVlcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlcykpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlTGlzdCkpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlKSkge1xuXHRcdFx0dGhpcy5hZGQodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCB2YWx1ZSB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGUtbGlzdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlTGlzdH1cblx0ICovXG5cdGFkZChub2RlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXMobm9kZSkge1xuXHRcdHJldHVybiBzdXBlci5oYXModmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpcy50b0FycmF5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRvQXJyYXkoKSkge1xuXHRcdFx0cGFydHMucHVzaChub2RlLnRvU3RyaW5nKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xuXHR9XG5cblx0Z2V0IGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gc3VwZXIuc2l6ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm9kZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFZhbHVlU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxEYXRhXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0cmVlU3RydWN0dXJlU3ltYm9sID0gU3ltYm9sKFwidHJlZVN0cnVjdHVyZVwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuTm9kZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlIENsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHNcbiAqL1xuY2xhc3MgTm9kZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHsqfSBbdmFsdWVdXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSA9IHZhbHVlO1xuXG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXSA9IHtcblx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdGNoaWxkTm9kZXM6IG5ldyBOb2RlTGlzdCgpLFxuXHRcdFx0bGV2ZWw6IDAsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0YXBwZW5kQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5hZGQodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IHRoaXMubGV2ZWwgKyAxO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0cmVtb3ZlQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5yZW1vdmUodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSBudWxsO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IDA7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIC0xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQpO1xuXHR9KTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgYXNzZW1ibGVQYXJ0cyB9IGZyb20gXCIuL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4vZXh0ZW5kLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZFRyZWUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcGFyZW50U3ltYm9sID0gU3ltYm9sKFwicGFyZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByb290U3ltYm9sID0gU3ltYm9sKFwicm9vdFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBidWlsZFRyZWVPcHRpb25zXG4gKiBAcHJvcGVydHkge2FycmF5fSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzPVtudWxsLCB1bmRlZmluZWRdIGRlZmluZXMgdGhlIHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aG91dCBwYXJlbnRzXG4gKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IG9wdGlvbnMuZmlsdGVyIGZpbHRlcmluZyBvZiB0aGUgdmFsdWVzXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGdpdmVuIHN1YmplY3QgdXNpbmcgYSBzZWxlY3RvciBhbmQgc3BlY2lmaWVkIElEIGFuZCBwYXJlbnQgSUQga2V5cy5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgdHJlZS1saWtlIGRhdGEgc3RydWN0dXJlcyBmcm9tIHBsYWluIEphdmFTY3JpcHRcbiAqIG9iamVjdHMuIEl0IHRha2VzIGluIGZvdXIgcmVxdWlyZWQgcGFyYW1ldGVyczogdGhlIHN1YmplY3Qgb2JqZWN0IHRoYXQgeW91IHdhbnQgdG8gdHVybiBpbnRvIGEgdHJlZSwgYVxuICogc2VsZWN0b3IgdGhhdCBpZGVudGlmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBzdWJqZWN0IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cmVlLCBhbmQgdHdvIGtleXNcbiAqIChpZEtleSBhbmQgcGFyZW50SURLZXkpIHRoYXQgc3BlY2lmeSB3aGljaCBwcm9wZXJ0aWVzIGluIHRoZSBzdWJqZWN0IHJlcHJlc2VudCB0aGUgdW5pcXVlIGlkZW50aWZpZXJzXG4gKiBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB0aGUgdHJlZS5cbiAqXG4gKiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvcHRpb25zIG9iamVjdCB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLFxuICogc3VjaCBhcyBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyByb290cyBvZiB0aGUgdHJlZSwgb3IgcHJvdmlkaW5nIGEgY3VzdG9tIGZpbHRlclxuICogZnVuY3Rpb24gdG8gb25seSBpbmNsdWRlIGNlcnRhaW4gbm9kZXMgaW4gdGhlIGZpbmFsIG91dHB1dC5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHdvcmtzIGJ5IGZpcnN0IHVzaW5nIHRoZSBhc3NlbWJsZVBhcnRzIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSByZWxldmFudFxuICogcGFydHMgb2YgdGhlIHN1YmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLCBhbmQgdGhlbiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRpbmcgbWFwIHRvIGNyZWF0ZSBOb2RlXG4gKiBvYmplY3RzIGFuZCBvcmdhbml6ZSB0aGVtIGludG8gcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmFzZWQgb24gdGhlIHZhbHVlcyBvZiB0aGUgaWRLZXkgYW5kIHBhcmVudElES2V5IHByb3BlcnRpZXMuXG4gKlxuICogVGhlIHJlc3VsdGluZyBOb2RlTGlzdCByZXByZXNlbnRzIHRoZSB0cmVlIHN0cnVjdHVyZSwgd2l0aCBlYWNoIE5vZGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsXG4gKiBvYmplY3QgZGF0YSBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWJvdXQgaXRzIHBvc2l0aW9uIGluIHRoZSB0cmVlLiBZb3UgY2FuIHRoZW4gdXNlIHRoZSBjaGlsZE5vZGVzXG4gKiBwcm9wZXJ0eSBvZiBlYWNoIE5vZGUgdG8gYWNjZXNzIGl0cyBjaGlsZHJlbiwgb3IgdGhlIHBhcmVudCBwcm9wZXJ0eSB0byBhY2Nlc3MgaXRzIHBhcmVudC5cbiAqXG4gKiBPdmVyYWxsLCB0aGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgZmxleGlibGUgYW5kIHBvd2VyZnVsIHdheSB0byB0cmFuc2Zvcm0gZmxhdCBkYXRhIGludG8gaGllcmFyY2hpY2FsXG4gKiBzdHJ1Y3R1cmVzLCBhbmQgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIHNjZW5hcmlvcyBzdWNoIGFzIGRpc3BsYXlpbmcgZm9sZGVyIHN0cnVjdHVyZXMgb3JcbiAqIHZpc3VhbGl6aW5nIGNvbXBsZXggZGF0YSByZWxhdGlvbnNoaXBzLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBhbiBhcnJheSBvZiBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSwgYW5kIHlvdSB3YW50XG4gKiB0byB0dXJuIGl0IGludG8gYSB0cmVlLWxpa2Ugc3RydWN0dXJlIHdoZXJlIGVhY2ggbm9kZSByZXByZXNlbnRzIGEgZm9sZGVyIG9yIGZpbGUsIGFuZCBjaGlsZCBub2Rlc1xuICogcmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGZpbGVTeXN0ZW0gPSBbXG4gKiAgIHsgaWQ6ICdmb2xkZXIxJywgbmFtZTogJ0ZvbGRlciAxJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogbnVsbCB9LFxuICogICB7IGlkOiAnZmlsZTEnLCBuYW1lOiAnRmlsZSAxJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTInLCBuYW1lOiAnRmlsZSAyJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMScsIG5hbWU6ICdTdWJmb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTMnLCBuYW1lOiAnRmlsZSAzJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTQnLCBuYW1lOiAnRmlsZSA0JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMicsIG5hbWU6ICdTdWJmb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTUnLCBuYW1lOiAnRmlsZSA1JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZmlsZTYnLCBuYW1lOiAnRmlsZSA2JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZm9sZGVyMicsIG5hbWU6ICdGb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGU3JywgbmFtZTogJ0ZpbGUgNycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU4JywgbmFtZTogJ0ZpbGUgOCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjMnLCBuYW1lOiAnU3ViZm9sZGVyIDMnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU5JywgbmFtZTogJ0ZpbGUgOScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqICAgeyBpZDogJ2ZpbGUxMCcsIG5hbWU6ICdGaWxlIDEwJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIzJyB9LFxuICogXTtcbiAqXG4gKiBjb25zdCB0cmVlID0gYnVpbGRUcmVlKGZpbGVTeXN0ZW0sICdpZCcsICdpZCcsICdwYXJlbnQnLCB7IHJvb3RSZWZlcmVuY2VzOiBbbnVsbF0gfSk7XG4gKlxuICogY29uc29sZS5sb2codHJlZS50b1N0cmluZygpKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBidWlsZFRyZWUgZnVuY3Rpb24gdGFrZXMgaW4gdGhlIGFycmF5IG9mIGRhdGEgb2JqZWN0cywgYXMgd2VsbCBhcyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZ5aW5nXG4gKiB0aGUga2V5cyB0byB1c2UgZm9yIGlkZW50aWZ5aW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gSW4gdGhpcyBleGFtcGxlLCB3ZSB1c2UgdGhlIGlkXG4gKiBrZXkgdG8gaWRlbnRpZnkgbm9kZXMsIGFuZCB0aGUgcGFyZW50IGtleSB0byBzcGVjaWZ5IHRoZSBwYXJlbnQgb2YgZWFjaCBub2RlLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgdHJlZSBvYmplY3QgaXMgYSBuZXN0ZWQgdHJlZSBzdHJ1Y3R1cmUsIHdoZXJlIGVhY2ggbm9kZSBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSBvclxuICogZm9sZGVyLCBhbmQgaGFzIGNoaWxkIG5vZGVzIHJlcHJlc2VudGluZyBpdHMgY29udGVudHMuIFRoZSB0b1N0cmluZyBtZXRob2Qgb2YgdGhlIHRyZWUgb2JqZWN0XG4gKiBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgdGhlIHRyZWUgaW4gYSByZWFkYWJsZSBmb3JtYXQ6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIC0gRm9sZGVyIDFcbiAqICAgLSBGaWxlIDFcbiAqICAgLSBGaWxlIDJcbiAqICAgLSBTdWJmb2xkZXIgMVxuICogICAgIC0gRmlsZSAzXG4gKiAgICAgLSBGaWxlIDRcbiAqICAgLSBTdWJmb2xkZXIgMlxuICogICAgIC0gRmlsZSA1XG4gKiAgICAgLSBGaWxlIDZcbiAqIC0gRm9sZGVyIDJcbiAqICAgLSBGaWxlIDdcbiAqICAgLSBGaWxlIDhcbiAqICAgLSBTdWJmb2xkZXIgM1xuICogICAgIC0gRmlsZSA5XG4gKiAgICAgLSBGaWxlIDEwXG4gKiBgYGBcbiAqXG4gKiBAbWVtYmVyb2YgTW9uc3Rlci5EYXRhXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBidWlsZCB0aGUgdHJlZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIEVpdGhlciBhIHN0cmluZyB0byBzcGVjaWZ5IGEgcHJvcGVydHkgb2YgZWFjaCBvYmplY3QgdG8gdXNlIGFzIGEgc2VsZWN0b3IsIG9yIGEgc2VsZWN0b3IgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtYXAgb2Ygb2JqZWN0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZEtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSB1bmlxdWUgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElES2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byB1c2UgYXMgdGhlIHBhcmVudCBJRCBvZiBlYWNoIG5vZGUuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gQWRkaXRpb25hbCBvcHRpb25zIHRvIG1vZGlmeSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IuXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBbb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXV0gLSBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gdHJlYXQgYXMgcm9vdCByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgdGhlIHRyZWUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gQSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBub2RlLlxuICpcbiAqIEByZXR1cm4geyp9IFRoZSByZXN1bHRpbmcgdHJlZSBzdHJ1Y3R1cmUgYXMgYSBOb2RlTGlzdC5cbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBzZWxlY3RvciBjYWxsYmFjayBtdXN0IHJldHVybiBhIG1hcC5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqXG4gKiBAc2luY2UgMS4yNi4wXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZShzdWJqZWN0LCBzZWxlY3RvciwgaWRLZXksIHBhcmVudElES2V5LCBvcHRpb25zKSB7XG5cdGNvbnN0IG5vZGVzID0gbmV3IE1hcCgpO1xuXG5cdGlmICghaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHRvcHRpb25zID0gZXh0ZW5kKFxuXHRcdHt9LFxuXHRcdHtcblx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbbnVsbCwgdW5kZWZpbmVkXSxcblx0XHRcdGZpbHRlcjogdW5kZWZpbmVkLFxuXHRcdH0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG5cdGxldCByb290UmVmZXJlbmNlcyA9IG9wdGlvbnMucm9vdFJlZmVyZW5jZXM7XG5cdGlmICghaXNBcnJheShyb290UmVmZXJlbmNlcykpIHtcblx0XHRyb290UmVmZXJlbmNlcyA9IFtyb290UmVmZXJlbmNlc107XG5cdH1cblxuXHRjb25zdCBjaGlsZE1hcCA9IGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgZnVuY3Rpb24gKG8sIGssIG0pIHtcblx0XHRjb25zdCBrZXkgPSBvPy5baWRLZXldO1xuXHRcdGxldCByZWYgPSBvPy5bcGFyZW50SURLZXldO1xuXHRcdGlmIChyb290UmVmZXJlbmNlcy5pbmRleE9mKHJlZikgIT09IC0xKSByZWYgPSByb290U3ltYm9sO1xuXG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRvW3BhcmVudFN5bWJvbF0gPSByZWY7XG5cblx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUobyk7XG5cdFx0dGhpcy5oYXMocmVmKVxuXHRcdFx0PyB0aGlzLmdldChyZWYpLmFkZChub2RlKVxuXHRcdFx0OiB0aGlzLnNldChyZWYsIG5ldyBOb2RlTGlzdCgpLmFkZChub2RlKSk7XG5cdFx0bm9kZXMuc2V0KGtleSwgbm9kZSk7XG5cdH0pO1xuXG5cdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRjb25zdCBpZCA9IG5vZGU/LltcInZhbHVlXCJdPy5baWRLZXldO1xuXG5cdFx0aWYgKGNoaWxkTWFwLmhhcyhpZCkpIHtcblx0XHRcdG5vZGUuY2hpbGROb2RlcyA9IGNoaWxkTWFwLmdldChpZCk7XG5cdFx0XHRjaGlsZE1hcC5kZWxldGUoaWQpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgbGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG5cdGNoaWxkTWFwLmZvckVhY2goKHMpID0+IHtcblx0XHRpZiAocyBpbnN0YW5jZW9mIFNldCkge1xuXHRcdFx0cy5mb3JFYWNoKChuKSA9PiB7XG5cdFx0XHRcdGxpc3QuYWRkKG4pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbGlzdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBbiBpdGVyYXRvciB0byBydW4gcmVjdXJzaXZlbHkgdGhyb3VnaCBhIHRyZWUgb2Ygbm9kZXNcbiAqIEBleHRlbmRzIEJhc2VcbiAqL1xuY2xhc3MgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gbm9kZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iobm9kZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2lzTm9kZUxpc3RTeW1ib2xdID0gZmFsc2U7XG5cblx0XHQvLyBpdGVyYXRvciBpcyBhIE5vZGVMaXN0XG5cdFx0aWYgKGlzSW5zdGFuY2Uobm9kZSwgTm9kZUxpc3QpKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IG5vZGU7XG5cdFx0XHRjb25zdCBuID0gbmV3IE5vZGUoKTtcblx0XHRcdG4uY2hpbGROb2RlcyA9IGNoaWxkcmVuO1xuXHRcdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IHRydWU7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG47XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKiAoKSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGVuZCBvZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIHJlYWNoZWQuIEluIHRoaXMgY2FzZSwgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3Jcblx0XHQgKiBlbmRzIGFuZCBhbiBJdGVyYXRvclJlc3VsdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGluIHdoaWNoIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIGRvbmUgaXMgdHJ1ZS5cblx0XHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHRcdCAqL1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBub2RlbGlzdCBhbmQgdGhlIG1haW4gbm9kZSBpcyBvbmx5IGEgcGxhY2Vob2xkZXJcblx0XHRpZiAodGhpc1tpc05vZGVMaXN0U3ltYm9sXSAhPT0gdHJ1ZSkge1xuXHRcdFx0eWllbGQgdGhpc1tpbnRlcm5hbFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0Y29uc3QgY2hpbGROb2RlcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNoaWxkTm9kZXM7XG5cblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZE5vZGVzKSB7XG5cdFx0XHRcdHlpZWxkKiBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlUmVjdXJzaXZlSXRlcmF0b3J9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMpIHtcblx0XHRcdGNhbGxiYWNrKG5vZGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1RyZWVTZWxlY3RTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVHJlZVNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBUcmVlU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciB0cmVlc2VsZWN0IHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1vcGVuXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNCAwaC45MTZ2LTFoLS45MTZ2MXptMS44MzMgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek00LjUgNy41YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXN0YXRlPWNsb3NlXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNC0xdjFoLjkxNnYtMWgtLjkxNnptMS44MzMgMWguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek04LjUgNC41YS41LjUgMCAwIDAtMSAwdjNoLTNhLjUuNSAwIDAgMCAwIDFoM3YzYS41LjUgMCAwIDAgMSAwdi0zaDNhLjUuNSAwIDAgMCAwLTFoLTN2LTN6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW49ZmFsc2VdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDpcXFwiIFxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMFxcXCJde2Rpc3BsYXk6ZmxleDttYXJnaW46MH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIxXFxcIl17bWFyZ2luOjAgMCAwIDIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMlxcXCJde21hcmdpbjowIDAgMCA0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjNcXFwiXXttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI0XFxcIl17bWFyZ2luOjAgMCAwIDgwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNVxcXCJde21hcmdpbjowIDAgMCAxMDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI2XFxcIl17bWFyZ2luOjAgMCAwIDExMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjdcXFwiXXttYXJnaW46MCAwIDAgMTIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiOFxcXCJde21hcmdpbjowIDAgMCAxMzBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV17ZGlzcGxheTpub25lfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGJ1aWxkVHJlZSB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkdHJlZS5tanNcIjtcbmltcG9ydCB7IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfUk9MRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQgeyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1VSTCwgQVRUUklCVVRFX0lOVEVORCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuL3NlbGVjdC5tanNcIjtcbmltcG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NlbGVjdC5tanNcIjtcbmltcG9ydCB7IFRyZWVTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdCwgZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsTm9kZXNTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE5vZGVzXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBrZXlFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJrZXlFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBzZWxlY3QgZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICogSXQgc3VwcG9ydHMgZmlsdGVyaW5nLCBsb2NhbCBhbmQgcmVtb3RlLCBtdWx0aXBsZSBzZWxlY3Rpb24gYW5kIGhhcyBhXG4gKiB0ZW1wbGF0ZSBzeXN0ZW0gZm9yIGRpc3BsYXlpbmcgdGhlIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy90cmVlc2VsZWN0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItc2VsZWN0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNlbGVjdD48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7VHJlZVNlbGVjdH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RyZWVzZWxlY3QuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanNcbiAqIEBzdGFydHVtbCB0cmVlc2VsZWN0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFNlbGVjdFxuICogU2VsZWN0IDx8LS0gVHJlZVNlbGVjdFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHNpbmNlIDAuMTYuMFxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICogQHRocm93cyB7RXJyb3J9IG1hcCBpcyBub3QgaXRlcmFibGVcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkge1xuXHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0gPSBuZXcgTWFwKCk7XG5cblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXHRcdGNvbnN0IHJvb3RSZWZlcmVuY2VzID0gbWFwcGluZ09wdGlvbnM/LltcInJvb3RSZWZlcmVuY2VzXCJdO1xuXG5cdFx0Y29uc3QgaWQgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaWRUZW1wbGF0ZVwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFRlbXBsYXRlXCIsIFwicGFyZW50XCIpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cblx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRmaWx0ZXIsXG5cdFx0XHRyb290UmVmZXJlbmNlcyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIG4pO1xuXG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZvcm1hdHRlZFZhbHVlcy52YWx1ZTtcblx0XHRcdFx0Y29uc3QgaW50ZW5kID0gbi5sZXZlbDtcblxuXHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBcImNsb3NlXCI7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5zZXQodmFsdWUsIG4pO1xuXG5cdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vcHRpb25zLXNldFwiLCB7XG5cdFx0XHRvcHRpb25zLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0XHRjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBldmVudCwgXCJjbG9zZVwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwib3BlblwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24oZXZlbnQsIG1vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShldmVudCwgRXZlbnQpO1xuXG5cdGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBldmVudFwiKTtcblx0fVxuXG5cdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0Y29uc3Qgb3B0aW9uTm9kZSA9IHBhdGguc2hpZnQoKTtcblxuXHRjb25zdCBzdGF0ZSA9IG9wdGlvbk5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXN0YXRlXCIpO1xuXHRpZiAoc3RhdGUgIT09IG1vZGUpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gb3B0aW9uTm9kZS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJdXCIsXG5cdFx0KTtcblx0XHRpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoaGFuZGxlciwgXCJjbGlja1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHthcnJheTxsYWJlbCwgdmFsdWU+fVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmb3JtYXRLZXlMYWJlbChub2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSk7XG5cblx0Y29uc3QgbGFiZWwgPSBuZXcgRm9ybWF0dGVyKG5vZGUudmFsdWUpLmZvcm1hdChcblx0XHR0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcubGFiZWxUZW1wbGF0ZVwiLCBcIlwiKSxcblx0KTtcblx0Y29uc3QgdmFsdWUgPSBuZXcgRm9ybWF0dGVyKG5vZGUudmFsdWUpLmZvcm1hdChcblx0XHR0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcudmFsdWVUZW1wbGF0ZVwiLCBcIlwiKSxcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBidWlsZFRyZWVMYWJlbHModmFsdWUpIHtcblx0bGV0IG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldCh2YWx1ZSk7XG5cdGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQocGFyc2VJbnQodmFsdWUpKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gW107XG5cblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0bGV0IHB0ciA9IG5vZGU7XG5cdFx0d2hpbGUgKHB0cikge1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBwdHIpO1xuXHRcdFx0cGFydHMudW5zaGlmdChmb3JtYXR0ZWRWYWx1ZXMubGFiZWwpO1xuXHRcdFx0cHRyID0gcHRyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFydHM7XG59XG5cbi8qKlxuICogVGhpcyBmb3JtYXR0ZXIgY2FuIGZvcm1hdCBhIGxhYmVsIGhpZXJhcmNoaWNhbGx5LlxuICogVGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlcGFyYXRvcmAgZGV0ZXJtaW5lcyB0aGUgc2VwYXJhdG9yLlxuICpcbiAqIGBgYFxuICogYSAvIGIgLyBjXG4gKiBgYGBcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYXJndW1lbnQgb2YgdGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlbGVjdGlvbjpgLlxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkge1xuXHRyZXR1cm4gYnVpbGRUcmVlTGFiZWxzXG5cdFx0LmNhbGwodGhpcywgdmFsdWUpXG5cdFx0LmpvaW4odGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VwYXJhdG9yXCIsIFwiIC8gXCIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3Blbk9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcIm9wZW5PcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJmb2xkZXItaGFuZGxlclwiLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwib3B0aW9uXCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gY29udGFpbmVyXG5cdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHQucG9wKCk7XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWApO1xuXG5cdFx0Y29uc3QgbmV3U3RhdGUgPSBjdXJyZW50U3RhdGUgPT09IFwiY2xvc2VcIiA/IFwib3BlblwiIDogXCJjbG9zZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCwgbmV3U3RhdGUpO1xuXG5cdFx0Y29uc3QgbmV3VmlzaWJpbGl0eSA9IG5ld1N0YXRlID09PSBcIm9wZW5cIiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcblxuXHRcdGlmIChjb250YWluZXIuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSB7XG5cdFx0XHRjb25zdCBpbnRlbmQgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpO1xuXG5cdFx0XHRsZXQgcmVmID0gY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdGNvbnN0IGNoaWxkSW50ZW5kID0gcGFyc2VJbnQoaW50ZW5kKSArIDE7XG5cblx0XHRcdGNvbnN0IGNtcCA9IChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhID49IGI7XG5cdFx0XHR9O1xuXG5cdFx0XHR3aGlsZSAoXG5cdFx0XHRcdHJlZj8uaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpICYmXG5cdFx0XHRcdGNtcChwYXJzZUludChyZWYuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSwgY2hpbGRJbnRlbmQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgcmVmSW5kZXggPSByZWZcblx0XHRcdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0udmlzaWJpbGl0eWAsIG5ld1Zpc2liaWxpdHkpO1xuXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0uc3RhdGVgLCBcImNsb3NlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVmID0gcmVmLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1trZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXNba2V5RXZlbnRIYW5kbGVyXSk7XG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsKS50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW50ZW5kIHBhdGg6b3B0aW9ucy5pbnRlbmQsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpvcHRpb25zLnN0YXRlLCBcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHksIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuIHBhdGg6b3B0aW9ucy5oYXMtY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9sZGVyLWhhbmRsZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMudmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybVxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCIgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUcmVlU2VsZWN0KTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgdG9nZ2xlc3dpdGNoIHsgXG46YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMH0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtoZWlnaHQ6Mi41ZW07cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yczt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoLXJhZGlvIGlucHV0W3R5cGU9cmFkaW9de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmxhYmVse2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjIuNWVtO2xpbmUtaGVpZ2h0OjIuNWVtO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgLjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2gtc2xpZGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvdHRvbTo0cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NHB4O3RvcDo0cHg7dHJhbnNpdGlvbjouMnM7d2lkdGg6Y2FsYyg1MCUgLSA0cHgpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9mZnt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub2ZmLFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub257dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAuc3dpdGNoLXNsaWRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRvZ2dsZVN3aXRjaCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbE9uID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudE9uXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sT2ZmID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudE9mZlwiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU1RBVEVfT04gPSBcIm9uXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX09GRiA9IFwib2ZmXCI7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBUb2dnbGVTd2l0Y2ggZWxlbWVudFxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvc3dpdGNoLnBuZ1wiPlxuICpcbiAqXG4gKiBAc3RhcnR1bWwgdG9nZ2xlc3dpdGNoLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFRvZ2dsZVN3aXRjaFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAzLjU3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIFN3aXRjaFxuICovXG5jbGFzcyBUb2dnbGVTd2l0Y2ggZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaEBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRvZ2dsZS1zd2l0Y2hcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlPWN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsZW1lbnRcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZD1kaXNhYmxlZD1mYWxzZSBEaXNhYmxlZCBzdGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vbj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm9mZj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdmFsdWVzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZXMub2ZmPXNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNlbGVjdGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5vbj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub2ZmPXNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41Ny4wXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0b246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTNcIixcblx0XHRcdFx0b2ZmOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0yXCIsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWVzOiB7XG5cdFx0XHRcdG9uOiBcIm9uXCIsXG5cdFx0XHRcdG9mZjogXCJvZmZcIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XCJ0b2dnbGUtc3dpdGNoLW9uXCI6IFwiT05cIixcblx0XHRcdFx0XCJ0b2dnbGUtc3dpdGNoLW9mZlwiOiBcIk9GRlwiLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Ub2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8qKlxuXHRcdCAqIGluaXQgdmFsdWUgdG8gb2ZmXG5cdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHQgKi9cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0ICovXG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHQgKi9cblx0XHR2YWxpZGF0ZUFuZFNldFZhbHVlLmNhbGwoc2VsZik7XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdHRvZ2dsZUNsYXNzT24uY2FsbChzZWxmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9nZ2xlQ2xhc3NPZmYuY2FsbChzZWxmKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIGNoYW5nZWRcblx0XHQgKi9cblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdHZhbGlkYXRlQW5kU2V0VmFsdWUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHR0b2dnbGVDbGFzcy5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdXBkYXRlciB0cmFuc2Zvcm1lciBtZXRob2RzIGZvciBwaXBlXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInN0YXRlLWNhbGxiYWNrXCI6IChXZXJ0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RvZ2dsZVN3aXRjaFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRvZ2dsZSBzd2l0Y2hcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS5jbGljaygpXG5cdCAqIGBgYFxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdHRoaXMuY2xpY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUudG9nZ2xlT24oKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT24oKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGVPZmYoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT2ZmKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZSA9PT0gU1RBVEVfT05cblx0XHRcdD8gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIilcblx0XHRcdDogdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2YWx1ZVxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnZhbHVlPVwib25cIlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c3dpdGNoXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ2xhc3NPbigpIHtcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vblwiKSk7IC8vIGNoYW5nZSBjb2xvclxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzT2ZmKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub2ZmXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSkge1xuXHRcdHRvZ2dsZUNsYXNzT24uY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHR0b2dnbGVDbGFzc09mZi5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlVmFsdWVzKCkge1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpKTsgLy8gc2V0IGZvcm0gdmFsdWVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKTtcblx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTsgLy8gc2V0IGZvcm0gdmFsdWVcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic3RhdGVcIiwgdGhpcy5zdGF0ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBbmRTZXRWYWx1ZSgpIHtcblx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXG5cdGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IFtdO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdHZhbGlkYXRlZFZhbHVlcy5wdXNoKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKSk7XG5cblx0aWYgKHZhbGlkYXRlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPT09IGZhbHNlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdCdUaGUgdmFsdWUgXCInICtcblx0XHRcdFx0dmFsdWUgK1xuXHRcdFx0XHQnXCIgbXVzdCBiZSBcIicgK1xuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSArXG5cdFx0XHRcdCdcIiBvciBcIicgK1xuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIiksXG5cdFx0KTtcblx0XHR0aGlzLnNldE9wdGlvbihcImRpc2FibGVkXCIsIHRydWUpO1xuXHRcdHRoaXMuZm9ybURpc2FibGVkQ2FsbGJhY2sodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG5cdFx0dGhpcy5mb3JtRGlzYWJsZWRDYWxsYmFjayhmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5jb2RlID09PSBcIlNwYWNlXCIpIHtcblx0XHRcdHNlbGZbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHR0b2dnbGVWYWx1ZXMuY2FsbChzZWxmKTtcblx0fSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLXN0YXRlIHBhdGg6dmFsdWUgfCBjYWxsOnN0YXRlLWNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIG9uXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy50b2dnbGUtc3dpdGNoLW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIG9mZlwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlLXN3aXRjaC1vZmZcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoLXNsaWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUb2dnbGVTd2l0Y2gpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFRlbXBsYXRlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUVsZW1lbnQgYG1vbnN0ZXItdGVtcGxhdGVgIHJlbG9hZHMgYSBjb250ZW50IGFuZCBhZGRzIGl0IHRvIHRoZSBTaGFkb3dSb290LlxuICogVGhlIGNvbnRlbnQgaXMgc2V0IHRvIG5vdCB2aXNpYmxlLFxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvdGVtcGxhdGUucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItdGVtcGxhdGUgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtUZW1wbGF0ZX0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RlbXBsYXRlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBjb250ZW50IHdpbGwgbm90IGJlIGxvYWRlZCB1bnRpbCB0aGlzIGVsZW1lbnQgaXMgdmlzaWJsZS4gSWYgdGhlIGVsZW1lbnQgaXMgaW52aXNpYmxlIGFnYWluIGFuZCBiZWNvbWVzIHZpc2libGUgYWdhaW4sXG4gKiB0aGUgY29udGVudCBpcyByZWxvYWRlZCBhcyB3ZWxsLiB5b3UgY2FuIGRpc2FibGUgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nIGByZWxvYWQ9b25zaG93YC4gKlxuICpcbiAqIEBzdGFydHVtbCB0ZW1wbGF0ZS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBUZW1wbGF0ZVxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgdGVtcGxhdGUgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkICBjdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBgb25zaG93YC4gQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgb25zaG93LiB0aGlzIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlByb2Nlc3NvcltdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlbG9hZDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcm9jZXNzb3JzOiBbXSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc29yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMTEuOFxuICovXG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCgpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0aWYgKCFpc1N0cmluZyh1cmwpIHx8IHVybCA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdXJsXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGNvbnN0IGRlZmF1bHRTbG90ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJzbG90W25hbWU9ZGVmYXVsdF1cIik7XG5cdGlmICghKGRlZmF1bHRTbG90IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBkZWZhdWx0IHNsb3RcIik7XG5cdH1cblxuXHRkZWZhdWx0U2xvdC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdGxldCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdH1cblxuXHRsb2FkQW5kQXNzaWduQ29udGVudChjb250YWluZXIsIHVybCwgb3B0aW9ucylcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRkZWZhdWx0U2xvdC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHRydW5Qcm9jZXNzb3JzLmNhbGwodGhpcyk7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3J1blByb2Nlc3NvcnN9XG4gKi9cbmZ1bmN0aW9uIHJ1blByb2Nlc3NvcnMoKSB7XG5cdGNvbnN0IHByb2Nlc3NvcnMgPSB0aGlzLmdldE9wdGlvbihcInByb2Nlc3NvcnNcIik7XG5cdGlmICghaXNBcnJheShwcm9jZXNzb3JzKSkgcmV0dXJuO1xuXG5cdGZvciAoY29uc3QgWywgcHJvY2Vzc29yXSBvZiBwcm9jZXNzb3JzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvcj8uc291cmNlO1xuXHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gcHJvY2Vzc29yPy5kZXN0aW5hdGlvbjtcblxuXHRcdGlmIChpc1N0cmluZyhzb3VyY2UpICYmIGlzU3RyaW5nKGRlc3RpbmF0aW9uKSkge1xuXHRcdFx0Y29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNvdXJjZSk7XG5cdFx0XHRjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGRlc3RpbmF0aW9uKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzb3VyY2VOb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0ZGVzdGluYXRpb25Ob2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUuaW5uZXJIVE1MID0gc291cmNlTm9kZS5jbG9uZU5vZGUodHJ1ZSkuaW5uZXJIVE1MO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxzbG90IG5hbWU9XCJkZWZhdWx0XCI+PC9zbG90PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZW1wbGF0ZSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7SG9zdFN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItZm9ybXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubW9uc3Rlci1mb3JtIGxhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmdyaWR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbH5maWVsZHNldCwubW9uc3Rlci1mb3JtIGxhYmVsfmxhYmVse21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBvcHRpb246Y2hlY2tlZCwubW9uc3Rlci1mb3JtIG9wdGlvbjpmb2N1cywubW9uc3Rlci1mb3JtIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JvcmRlcjowO2JvcmRlci1ib3R0b20tcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1ib3R0b206dGhpbiB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGluO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsLC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGxhYmVsIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwgc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwgdGV4dGFyZWEsLm1vbnN0ZXItZm9ybSBsYWJlbCtpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsK3NlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsK3RleHRhcmVhe21hcmdpbi10b3A6LjJyZW07d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6Mi41cmVtIDJyZW0gMnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXQgbGVnZW5ke2ZvbnQtc2l6ZTouOHJlbTttYXgtd2lkdGg6OTUlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4xcmVtIDJyZW0gLjJyZW0gLjVyZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDowO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0fmZpZWxkc2V0e21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbnttYXJnaW46LjJyZW0gMH0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbToxcmVtfS5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOm5vbmV9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpob3ZlciwubW9uc3Rlci1mb3JtIGlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLC5tb25zdGVyLWZvcm0gc2VsZWN0OmhvdmVyLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MXB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24tY29udGVudDpzdHJldGNoO2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjA7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17aGVpZ2h0OjY0cHg7bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRdLFtkYXRhLW1vbnN0ZXItcm9sZT1mb290ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1oZWFkZXJde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRW1iZWQgfTtcblxuLyoqXG4gKiBUaGUgRW1iZWQgcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFNjcmlwdCBUYWcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqIEB0dXRvcmlhbCBpMThuLWxvY2FsZS1hbmQtZm9ybWF0dGVyXG4gKi9cbmNsYXNzIEVtYmVkIGV4dGVuZHMgUHJvdmlkZXIge1xuXHQvKipcblx0ICogYGBgaHRtbFxuXHQgKiA8c2NyaXB0IGlkPVwidHJhbnNsYXRpb25zXCIgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cblx0ICoge1xuXHQgKiAgICAgXCJoZWxsb1wiOiBcIkhhbGxvXCJcblx0ICogfVxuXHQgKiA8L3NjcmlwdD5cblx0ICogYGBgXG5cdCAqXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogbmV3IEVtYmVkKCd0cmFuc2xhdGlvbnMnKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IGVsZW1lbnRPcklkXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbGVtZW50T3JJZCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmIChlbGVtZW50T3JJZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR8c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPSBlbGVtZW50T3JJZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fHN0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmFuc2xhdGVFbGVtZW50ID0gZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoZWxlbWVudE9ySWQpLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHNcblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMudHJhbnNsYXRlRWxlbWVudCA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGV4dCBub3QgZm91bmRcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICghKHRoaXMudHJhbnNsYXRlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTY3JpcHRFbGVtZW50KSkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYSBzY3JpcHQgdGFnXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy50cmFuc2xhdGVFbGVtZW50LnR5cGUgIT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG5cdFx0XHRcdHJlamVjdChcblx0XHRcdFx0XHRuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhIHNjcmlwdCB0YWcgd2l0aCB0eXBlIGFwcGxpY2F0aW9uL2pzb25cIiksXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHRyYW5zbGF0aW9ucyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0cmFuc2xhdGlvbnMgPSBKU09OLnBhcnNlKHRoaXMudHJhbnNsYXRlRWxlbWVudC5pbm5lckhUTUwudHJpbSgpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0cmFuc2xhdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRyYW5zbGF0aW9ucyBub3QgZm91bmQgb3IgaW52YWxpZFwiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdCA9IG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKTtcblx0XHRcdHQuYXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucyk7XG5cblx0XHRcdHJlc29sdmUodCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIGBzY3JpcHRbZGF0YS1tb25zdGVyLXJvbGU9dHJhbnNsYXRpb25zXWAgaXMgc2VhcmNoZWQgZm9yIGFuZCB0aGUgdHJhbnNsYXRpb25zIGFyZSBhc3NpZ25lZCB0byB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHJldHVybnMge1Byb21pc2U8QXdhaXRlZDx1bmtub3duPltdPn1cblx0ICovXG5cdHN0YXRpYyBhc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbWVudCkge1xuXHRcdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdXCIpO1xuXHRcdGlmIChsaXN0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0bGlzdC5mb3JFYWNoKCh0cmFuc2xhdGlvbkVsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IHAgPSBuZXcgRW1iZWQodHJhbnNsYXRpb25FbGVtZW50LCB7fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCkpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGRvbVJlYWR5LCB3aW5kb3dSZWFkeSB9O1xuXG4vKipcbiAqIFRoaXMgdmFyaWFibGUgaXMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIGFzIHNvb24gYXMgdGhlIGRvbSBpcyBhdmFpbGFibGUuXG4gKlxuICogVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgb3JpZ2luYWwgSFRNTCBkb2N1bWVudCBpcyBmdWxseSBsb2FkZWQgYW5kIHBhcnNlZFxuICogd2l0aG91dCB3YWl0aW5nIGZvciBzdHlsZXNoZWV0cywgaW1hZ2VzLCBhbmQgc3ViZnJhbWVzIHRvIGZpbmlzaCBsb2FkaW5nLlxuICpcbiAqIGRvY3VtZW50LnJlYWR5U3RhdGUgY2hhbmdlcyB0byBpbnRlcmFjdGl2ZVxuICogd2luZG93J3MgRE9NQ29udGVudExvYWRlZCBldmVudCBnZXRzIGZpcmVkXG4gKiBkb2N1bWVudC5yZWFkeVN0YXRlIGNoYW5nZXMgdG8gY29tcGxldGVcbiAqIHdpbmRvdydzIGxvYWQgZXZlbnQgZ2V0cyBmaXJlZCBsb2FkXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IHZhcmlhYmxlIHRvIGNoZWNrIGlmIGRvbSBpcyByZWFkeVxuICogQHR5cGUge1Byb21pc2V9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9ET01Db250ZW50TG9hZGVkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IGRvbVJlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIHJlc29sdmUpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc29sdmUoKTtcblx0fVxufSk7XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgd2luZG93cyBpcyBhdmFpbGFibGUuXG4gKlxuICogVGhlIGxvYWQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgZW50aXJlIHBhZ2UgaXMgbG9hZGVkLCBpbmNsdWRpbmcgYWxsIGRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyBzdHlsZXNoZWV0cyxcbiAqIGFzc2V0cywgYW5kIGltYWdlcy4gVW5saWtlIERPTUNvbnRlbnRMb2FkZWQsIHdoaWNoIGZpcmVzIGFzIHNvb24gYXMgdGhlIERPTSBvZiB0aGUgcGFnZSBpcyBsb2FkZWQsXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSByZXNvdXJjZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IHZhcmlhYmxlIHRvIGNoZWNrIGlmIHdpbmRvdyBpcyByZWFkeVxuICogQHR5cGUge1Byb21pc2V9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvbG9hZF9ldmVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVhZHlTdGF0ZVxuICovXG5jb25zdCB3aW5kb3dSZWFkeSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuXHRcdHJlc29sdmUoKTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG5cdH1cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEZvY3VzTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9DT05URVhUID0gXCJjb250ZXh0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YWNrU3ltYm9sID0gU3ltYm9sKFwic3RhY2tcIik7XG5cbi8qKlxuICogV2l0aCB0aGUgZm9jdXMgbWFuYWdlciB0aGUgZm9jdXMgY2FuIGJlIHN0b3JlZCBpbiBhIGRvY3VtZW50LCByZWNhbGxlZCBhbmQgbW92ZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBIYW5kbGUgdGhlIGZvY3VzXG4gKi9cbmNsYXNzIEZvY3VzTWFuYWdlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCksIEhUTUxEb2N1bWVudCk7XG5cblx0XHR0aGlzW3N0YWNrU3ltYm9sXSA9IG5ldyBTdGFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2ZvY3VzbWFuYWdlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0hUTUxEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFtLRVlfRE9DVU1FTlRdOiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFtLRVlfQ09OVEVYVF06IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1lbWJlcnMgdGhlIGN1cnJlbnQgZm9jdXMgb24gYSBzdGFjay5cblx0ICogU2V2ZXJhbCBmb2N1cyBjYW4gYmUgc3RvcmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRzdG9yZUZvY3VzKCkge1xuXHRcdGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0aWYgKGFjdGl2ZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdHRoaXNbc3RhY2tTeW1ib2xdLnB1c2goYWN0aXZlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhc3QgZm9jdXMgb24gdGhlIHN0YWNrIGlzIHNldCBhZ2FpblxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRyZXN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgbGFzdCA9IHRoaXNbc3RhY2tTeW1ib2xdLnBvcCgpO1xuXHRcdGlmIChsYXN0IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpcy5mb2N1cyhsYXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBwcmV2ZW50U2Nyb2xsXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzKGVsZW1lbnQsIHByZXZlbnRTY3JvbGwpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIE5vZGUpO1xuXG5cdFx0ZWxlbWVudC5mb2N1cyh7XG5cdFx0XHRwcmV2ZW50U2Nyb2xsOiBwcmV2ZW50U2Nyb2xsID8/IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RWxlbWVudH1cblx0ICovXG5cdGdldEFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKS5hY3RpdmVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdCBhbGwgZWxlbWVudHMgdGhhdCBjYW4gYmUgZm9jdXNlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Z2V0Rm9jdXNhYmxlKHF1ZXJ5KSB7XG5cdFx0bGV0IGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0NPTlRFWFQpO1xuXHRcdGlmIChjb250ZXh0RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb250ZXh0RWxlbWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShjb250ZXh0RWxlbWVudCwgTm9kZSk7XG5cblx0XHRpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVTdHJpbmcocXVlcnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5jb250ZXh0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHQnZGV0YWlscywgYnV0dG9uLCBpbnB1dCwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBib2R5Jyxcblx0XHRcdCksXG5cdFx0XS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkICYmICFlbGVtZW50Lm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpID09PSBcInRydWVcIikgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGlmIChyZWN0LndpZHRoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRpZiAocmVjdC5oZWlnaHQgPT09IDApIHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzTmV4dChxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggKyAxXSB8fCBmb2N1c2FibGVbMF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbMF0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzUHJldihxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggLSAxXSB8fCBmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHByb3BlcnR5TmFtZSA9IFwiaW50ZXJuYWxEZWZhdWx0c1wiO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICpcbiAqIC0gYXR0YWNoSW50ZXJuYWxPYnNlcnZlclxuICogLSBkZXRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclxuICogLSBzZXRJbnRlcm5hbFxuICogLSBzZXRJbnRlcm5hbHNcbiAqIC0gZ2V0SW50ZXJuYWxcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjE1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBlcXVpcFdpdGhJbnRlcm5hbCgpIHtcblx0dmFsaWRhdGVPYmplY3QodGhpcyk7XG5cblx0aWYgKCFoYXNHZXR0ZXIodGhpcywgcHJvcGVydHlOYW1lKSkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eU5hbWUsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgZGVmYXVsdHMgPSBleHRlbmQoe30sIHRoaXNbcHJvcGVydHlOYW1lXSB8fCB7fSk7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoZGVmYXVsdHMpO1xuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiYXR0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiZGV0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBvYnNlcnZlciBpcyBhdHRhY2hlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHRoaXNbXCJjb250YWluc0ludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH07XG5cblx0LyoqXG5cdCAqIFNldCBhbiBpbnRlcm5hbCB2YWx1ZSwgbmVzdGVkIGludGVybmFscyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHR0aGlzW1wic2V0SW50ZXJuYWxcIl0gPSAocGF0aCwgdmFsdWUpID0+IHtcblx0XHRuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkpLnNldFZpYShwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIHNldCBtdWx0aXBsZSBpbnRlcm5hbHMgYXQgb25jZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICovXG5cdHRoaXNbXCJzZXRJbnRlcm5hbHNcIl0gPSAob3B0aW9ucykgPT4ge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04ob3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0ZXh0ZW5kKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgaW50ZXJuYWxzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHR0aGlzW1wiZ2V0SW50ZXJuYWxcIl0gPSAocGF0aCwgZGVmYXVsdFZhbHVlKSA9PiB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKSkuZ2V0VmlhKFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gcHJvcFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzR2V0dGVyKG9iaiwgcHJvcCkge1xuXHR3aGlsZSAoaXNPYmplY3Qob2JqKSkge1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk/LltcImdldFwiXSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0bGV0IG9iaiA9IHt9O1xuXG5cdGlmICghaXNTdHJpbmcoZGF0YSkpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHR0cnkge1xuXHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0cnkge1xuXHRcdG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyBlO1xuXHR9XG5cblx0cmV0dXJuIHZhbGlkYXRlT2JqZWN0KG9iaik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfVElUTEUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIEtFWV9ET0NVTUVOVCwgS0VZX1FVRVJZLCByZWZlcmVuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0RPQ1VNRU5UID0gXCJkb2N1bWVudFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfUVVFUlkgPSBcInF1ZXJ5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9USU1FT1VUID0gXCJ0aW1lb3V0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlZmVyZW5jZVN5bWJvbCA9IFN5bWJvbChcInJlZmVyZW5jZVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcmVzb3VyY2VzIHRvIGJlIGxvYWRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRsZXQgdXJpID0gdGhpcy5nZXRPcHRpb24odGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKSk7XG5cblx0XHRpZiAodXJpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcgc291cmNlXCIpO1xuXHRcdH0gZWxzZSBpZiAodXJpIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmkgPSB1cmkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2UgaWYgKCFpc1N0cmluZyh1cmkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB1cmwgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXSA9IHVyaTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRcdGVycm9yOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdGlmICh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5pc0Nvbm5lY3RlZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSB0aGUgc3BlY2lhbCBjbGFzc2VzIGFuZCBjcmVhdGVzIHRoZSBET00gb2JqZWN0LlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBhbHNvIGNhbGxlZCBpbXBsaWNpdGx5LCBpZiBub3QgeWV0IGRvbmUgZXhwbGljaXRseSwgYnkgY2FsbGluZyBgY29ubmVjdCgpYC5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSBlbGVtZW50IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCwgYGNyZWF0ZSgpYCBpcyBjYWxsZWQgaW1wbGljaXRseS5cblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0RvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNyYy9ocmVmIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnkgZGVmaW5lcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIGlzIHRvIGJlIGhvb2tlZCBpbnRvIHRoZSBkb20uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBlbGVtZW50IGF0dHJpYnV0ZSBpZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGUgZWxlbWVudCBhdHRyaWJ1dGUgdGl0bGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzIGVsZW1lbnQgYXR0cmlidXRlIGNsYXNzXG5cdCAqIEBwcm9wZXJ0eSB7aW50fSB0aW1lb3V0IHRpbWVvdXRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldOiB1bmRlZmluZWQsXG5cdFx0XHRbS0VZX0RPQ1VNRU5UXTogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRbS0VZX1FVRVJZXTogXCJoZWFkXCIsXG5cdFx0XHRbS0VZX1RJTUVPVVRdOiAxMDAwMCxcblx0XHRcdFtBVFRSSUJVVEVfSURdOiBuZXcgSUQoXCJyZXNvdXJjZVwiKS50b1N0cmluZygpLFxuXHRcdFx0W0FUVFJJQlVURV9DTEFTU106IHVuZGVmaW5lZCxcblx0XHRcdFtBVFRSSUJVVEVfVElUTEVdOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCBgYXZhaWxhYmxlKClgIHlvdSBjYW4gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhdmFpbGFibGUuXG5cdCAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFnIGlzIGluY2x1ZGVkIGFuZCB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHNlbGZbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwibm8gZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRpZiAoIXNlbGYuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiZWxlbWVudCBub3QgY29ubmVjdGVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJlcnJvclwiXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoXCJ0aW1lb3V0XCIpO1xuXHRcdFx0fSwgc2VsZi5nZXRPcHRpb24oXCJ0aW1lb3V0XCIpKTtcblxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZVwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0YWRkRXZlbnRzLmNhbGwodGhpcyk7XG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YWRkRXZlbnRzfVxuICovXG5mdW5jdGlvbiBhZGRFdmVudHMoKSB7XG5cdGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRlcnJvcjogYCR7XG5cdFx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXVxuXHRcdFx0fSBpcyBub3QgYXZhaWxhYmxlYCxcblx0XHR9KTtcblxuXHRcdHJldHVybjtcblx0fTtcblxuXHRjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdFx0cmV0dXJuO1xuXHR9O1xuXG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQsIGZhbHNlKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yLCBmYWxzZSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfU0NSSVBULFxufSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0S0VZX0RPQ1VNRU5ULFxuXHRLRVlfUVVFUlksXG5cdHJlZmVyZW5jZVN5bWJvbCxcblx0UmVzb3VyY2UsXG59IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGEgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZGF0YS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uUmVzb3VyY2VcbiAqIEBzdW1tYXJ5IEEgRGF0YSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBEYXRhIGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGU9Y29ycyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZmV0Y2hcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1hcHBsaWNhdGlvbi9qc29uIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItdHlwZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0bW9kZTogXCJjb3JzXCIsXG5cdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgYXBwZW5kcyB0aGUgSFRNTEVsZW1lbnQgdG8gdGhlIHNwZWNpZmllZCBkb2N1bWVudFxuXHQgKlxuXHQgKiB0aHJvd3Mge0Vycm9yfSB0YXJnZXQgbm90IGZvdW5kXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAoISh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuY3JlYXRlKCk7XG5cdFx0fVxuXG5cdFx0YXBwZW5kVG9Eb2N1bWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2RhdGFcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX1NDUklQVCk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0dGFyZ2V0Tm9kZS5hcHBlbmRDaGlsZCh0aGlzW3JlZmVyZW5jZVN5bWJvbF0pO1xuXG5cdGdldEdsb2JhbEZ1bmN0aW9uKFwiZmV0Y2hcIikodGhpcy5nZXRPcHRpb24oQVRUUklCVVRFX1NSQyksIHtcblx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIsIFwiY29yc1wiKSwgLy8gbm8tY29ycywgKmNvcnMsIHNhbWUtb3JpZ2luXG5cdFx0Y2FjaGU6IFwibm8tY2FjaGVcIiwgLy8gKmRlZmF1bHQsIG5vLWNhY2hlLCByZWxvYWQsIGZvcmNlLWNhY2hlLCBvbmx5LWlmLWNhY2hlZFxuXHRcdGNyZWRlbnRpYWxzOiB0aGlzLmdldE9wdGlvbihcImNyZWRlbnRpYWxzXCIsIFwic2FtZS1vcmlnaW5cIiksIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKSxcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsXG5cdH0pXG5cdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRcdGxvYWRlZDogdHJ1ZSxcblx0XHRcdFx0ZXJyb3I6IGUudG9TdHJpbmcoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHR0YXJnZXROb2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSFJFRixcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19MSU5LLFxufSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgS0VZX0RPQ1VNRU5ULCByZWZlcmVuY2VTeW1ib2wsIFJlc291cmNlIH0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgTGluayB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBleHRlcm5hbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NLlJlc291cmNlXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIExpbmsgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItYXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZmxhbmcge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaHJlZmxhbmd9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNpemVzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNyY3NldCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbWFnZXNyY3NldH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbnRlZ3JpdHl9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZWRpYSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1tZWRpYX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHByZWZldGNoIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXByZWZldGNofVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci10eXBlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhczogdW5kZWZpbmVkLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXG5cdFx0XHRkaXNhYmxlZDogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZjogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZmxhbmc6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc3Jjc2V0OiB1bmRlZmluZWQsXG5cdFx0XHRpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcblx0XHRcdG1lZGlhOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVmZXRjaDogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHJlbDogdW5kZWZpbmVkLFxuXHRcdFx0c2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IHVuZGVmaW5lZCxcblx0XHRcdG5vbmNlOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvbGlua1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfSFJFRjtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX0xJTkspO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRcImFzXCIsXG5cdFx0XCJjcm9zc09yaWdpblwiLFxuXHRcdFwiZGlzYWJsZWRcIixcblx0XHRcImhyZWZcIixcblx0XHRcImhyZWZsYW5nXCIsXG5cdFx0XCJpbWFnZXNpemVzXCIsXG5cdFx0XCJpbWFnZXNyY3NldFwiLFxuXHRcdFwiaW50ZWdyaXR5XCIsXG5cdFx0XCJtZWRpYVwiLFxuXHRcdFwicHJlZmV0Y2hcIixcblx0XHRcInJlZmVycmVycG9saWN5XCIsXG5cdFx0XCJzaXplc1wiLFxuXHRcdFwicmVsXCIsXG5cdFx0XCJ0eXBlXCIsXG5cdFx0QVRUUklCVVRFX0hSRUYsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdFx0QVRUUklCVVRFX05PTkNFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi9saW5rLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3R5bGVzaGVldCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBleHRlcm5hbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NLlJlc291cmNlXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBMaW5rIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFNjcmlwdCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBzY3JpcHRzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTS5SZXNvdXJjZVxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBTY3JpcHQgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFzeW5jPXRydWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1hc3luY31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyb3NzT3JpZ2luPWFub255bW91cyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWNyb3Nzb3JpZ2lufVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRlZmVyPWZhbHNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItZGVmZXJ9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnRlZ3JpdHkge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1pbnRlZ3JpdHl9XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbm9tb2R1bGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub21vZHVsZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5vbmNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9uY2V9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWZlcnJlcnBvbGljeSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXJlZmVycmVycG9saWN5fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXR5cGV9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXG5cdFx0XHRkZWZlcjogZmFsc2UsXG5cdFx0XHRpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcblx0XHRcdG5vbW9kdWxlOiBmYWxzZSxcblx0XHRcdG5vbmNlOiB1bmRlZmluZWQsXG5cdFx0XHRyZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogXCJ0ZXh0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9zY3JpcHRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfU1JDO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkZWZlclwiLFxuXHRcdFwiYXN5bmNcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibm9tb2R1bGVcIixcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9TUkMsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgZXF1aXBXaXRoSW50ZXJuYWwgfSBmcm9tIFwiLi4vdHlwZXMvaW50ZXJuYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0hSRUYsIEFUVFJJQlVURV9TUkMgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gXCIuL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YSB9IGZyb20gXCIuL3Jlc291cmNlL2RhdGEubWpzXCI7XG5pbXBvcnQgeyBTdHlsZXNoZWV0IH0gZnJvbSBcIi4vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qc1wiO1xuaW1wb3J0IHsgU2NyaXB0IH0gZnJvbSBcIi4vcmVzb3VyY2Uvc2NyaXB0Lm1qc1wiO1xuXG5leHBvcnQgeyBSZXNvdXJjZU1hbmFnZXIgfTtcblxuLyoqXG4gKiBUaGUgUmVzb3VyY2VNYW5hZ2VyIGlzIGEgc2luZ2xldG9uIHRoYXQgbWFuYWdlcyBhbGwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIHRocm93IHtFcnJvcn0gdW5zdXBwb3J0ZWQgZG9jdW1lbnQgdHlwZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHRcdGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG5cblx0XHRpZiAoISh0aGlzLmdldE9wdGlvbihcImRvY3VtZW50XCIpIGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGdldEludGVybmFsIGluc3RlYWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldE9wdGlvbihrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqL1xuXHRnZXRCYXNlVVJMKCkge1xuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIik/LmJhc2VVUkw7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wIHVzZSBpbnRlcm5hbERlZmF1bHRzIGluc3RlYWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbERlZmF1bHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudD1kb2N1bWVudCBEb2N1bWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVzb3VyY2VzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zY3JpcHRzPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH0gb2JqZWN0c1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuc3R5bGVzaGVldHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5kYXRhPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9IG9iamVjdHNcblx0ICovXG5cdGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdGRvY3VtZW50OiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFx0cmVzb3VyY2VzOiB7XG5cdFx0XHRcdFx0c2NyaXB0czogW10sXG5cdFx0XHRcdFx0c3R5bGVzaGVldHM6IFtdLFxuXHRcdFx0XHRcdGRhdGE6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZCBUYWdzIHRvIERPTVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJjb25uZWN0XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGF2YWlsYWJsZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChydW5SZXNvdXJjZU1ldGhvZC5jYWxsKHRoaXMsIFwiYXZhaWxhYmxlXCIpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBzY3JpcHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHRcblx0ICovXG5cdGFkZFNjcmlwdCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInNjcmlwdHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgU3R5bGVzaGVldFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmsuU3R5bGVzaGVldFxuXHQgKi9cblx0YWRkU3R5bGVzaGVldCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInN0eWxlc2hlZXRzXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIERhdGEgVGFnXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YVxuXHQgKi9cblx0YWRkRGF0YSh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcImRhdGFcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVzb3VyY2VNZXRob2QobWV0aG9kKSB7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJzY3JpcHRzXCIsIFwic3R5bGVzaGVldHNcIiwgXCJkYXRhXCJdKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRPcHRpb24oYHJlc291cmNlcy4ke3R5cGV9YCk7XG5cdFx0aWYgKCFpc0FycmF5KHJlc291cmNlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIFJlc291cmNlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZVttZXRob2RdKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRSZXNvdXJjZSh0eXBlLCB1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0bGV0IHJlc291cmNlO1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIFwic2NyaXB0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU2NyaXB0KGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3R5bGVzaGVldHNcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IFN0eWxlc2hlZXQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfSFJFRl06IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGF0YVwiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgRGF0YShleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9TUkNdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGV9YCk7XG5cdH1cblxuXHR0aGlzLmdldE9wdGlvbihcInJlc291cmNlc1wiKT8uW3R5cGVdLnB1c2gocmVzb3VyY2UpO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtDb25maWdNYW5hZ2VyU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgY29uZmlnbWFuYWdlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6bm9uZX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmRleERCSW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJpbmRleERCSW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRpYWxpemVkUHJvbWlzZVN5bWJvbCA9IFN5bWJvbChcImluaXRpYWxpemVkUHJvbWlzZVN5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFET05MWSA9IFwicmVhZG9ubHlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFEX1dSSVRFID0gXCJyZWFkd3JpdGVcIjtcblxuLyoqXG4gKiBUaGUgQ29uZmlnIE1hbmFnZXIgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlnLW1hbmFnZXIucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1ob3N0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1jb25maWctbWFuYWdlcj48L21vbnN0ZXItY29uZmlnLW1hbmFnZXI+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2NvbmZpZy1tYW5hZ2VyLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpZy1tYW5hZ2VyJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlnLW1hbmFnZXIucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDb25maWdNYW5hZ2VyXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBjb25maWcgbWFuYWdlciBjb21wb25lbnRcbiAqL1xuY2xhc3MgQ29uZmlnTWFuYWdlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9jb25maWctbWFuYWdlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7c3ltYm9sfVxuXHRcdCAqL1xuXHRcdHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IG51bGw7XG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdLnB1c2gob3BlbkRhdGFiYXNlLmNhbGwodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZHkoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGluZGV4REI6IHtcblx0XHRcdFx0bmFtZTogXCJtb25zdGVyXCIsXG5cdFx0XHRcdHZlcnNpb246IDIsXG5cdFx0XHRcdG9iamVjdFN0b3JlOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb25maWdcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcImtleVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0QmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cblx0ICovXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdHNldENvbmZpZyhrZXksIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKS50aGVuKCgpID0+IHtcblx0XHRcdHJldHVybiBzZXRCbG9iLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRkZWxldGVDb25maWcoa2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKS50aGVuKCgpID0+IHtcblx0XHRcdHJldHVybiBkZWxldGVCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlnLW1hbmFnZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbmZpZ01hbmFnZXJTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvcGVuRGF0YWJhc2UoKSB7XG5cdGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG5cdGNvbnN0IG5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIubmFtZVwiKTtcblx0Y29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi52ZXJzaW9uXCIpO1xuXHRjb25zdCBzdG9yYWdlTmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5uYW1lXCIpO1xuXHRjb25zdCBLZXlQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLmtleVBhdGhcIik7XG5cblx0aWYgKCFuYW1lIHx8ICF2ZXJzaW9uKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIGRhdGFiYXNlIG5hbWUgYW5kIHZlcnNpb24gbXVzdCBiZSBzZXQuXCIpO1xuXHR9XG5cblx0Y29uc3QgcmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbihuYW1lLCB2ZXJzaW9uKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcXVlc3Qub25lcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIG9wZW5pbmcgZGF0YWJhc2VcIiwgZXZlbnQpO1xuXHRcdFx0cmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH07XG5cblx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuXHRcdFx0dGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdID0gZXZlbnQ/LnRhcmdldD8ucmVzdWx0O1xuXHRcdFx0cmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0fTtcblxuXHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zdCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG5cblx0XHRcdGxldCBvYmplY3RTdG9yZTtcblx0XHRcdGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhzdG9yYWdlTmFtZSkpIHtcblx0XHRcdFx0b2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShzdG9yYWdlTmFtZSwgeyBrZXlQYXRoOiBLZXlQYXRoIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3RTdG9yZS50cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiRGF0YWJhc2UgdXBncmFkZSBjb21wbGV0ZVwiKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZSBlaXRoZXIgXCJyZWFkb25seVwiIG9yIFwicmVhZHdyaXRlXCJcbiAqL1xuZnVuY3Rpb24gZ2V0T2JqZWN0U3RvcmUobW9kZSkge1xuXHRjb25zdCBzdG9yYWdlTmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5uYW1lXCIpO1xuXG5cdGlmICghdGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuLlwiKTtcblx0fVxuXG5cdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0lEQkRhdGFiYXNlL3RyYW5zYWN0aW9uXG5cdC8vIHRyYW5zYWN0aW9uKHN0b3JlTmFtZXMsIG1vZGUsIG9wdGlvbnMpXG5cdGNvbnN0IHR4ID0gdGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdLnRyYW5zYWN0aW9uKHN0b3JhZ2VOYW1lLCBtb2RlKTtcblx0cmV0dXJuIHR4Lm9iamVjdFN0b3JlKHN0b3JhZ2VOYW1lKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gY2xlYXJPYmplY3RTdG9yZSgpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIFwicmVhZHdyaXRlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgcmVxID0gc3RvcmUuY2xlYXIoKTtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJjbGVhck9iamVjdFN0b3JlIGNvbXBsZXRlZFwiKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcImNsZWFyT2JqZWN0U3RvcmU6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2Ioa2V5KSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURPTkxZKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGV2dC50YXJnZXQucmVzdWx0O1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUuYmxvYik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgdmFsdWUgb2YgdGhlIGtleSAnXCIgKyBrZXkgKyBcIicgaXMgbm90IGRlZmluZWQuXCIpKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlQmxvYihrZXkpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgcmVxID0gc3RvcmUuZGVsZXRlKGtleSk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJkZWxldGVCbG9iOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzZXRCbG9iKGtleSwgYmxvYikge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFEX1dSSVRFKTtcblxuXHRjb25zdCBLZXlQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLmtleVBhdGhcIik7XG5cdGNvbnN0IG9iaiA9IHt9O1xuXHRvYmpbS2V5UGF0aF0gPSBrZXk7XG5cdG9iai5ibG9iID0gYmxvYjtcblx0Y29uc3QgcmVxID0gc3RvcmUucHV0KG9iaik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJzZXRCbG9iOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb25maWdNYW5hZ2VyKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IEhvc3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgRW1iZWQgfSBmcm9tIFwiLi4vLi4vaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IHdpbmRvd1JlYWR5IH0gZnJvbSBcIi4uLy4uL2RvbS9yZWFkeS5tanNcIjtcbmltcG9ydCB7IEZvY3VzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vZm9jdXNtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgXCIuL2NvbmZpZy1tYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb21pc2VzU3ltYm9sID0gU3ltYm9sKFwicHJvbWlzZXNTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5vdGlmeUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub3RpZnlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpZ01hbmFnZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBmb2N1c01hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJmb2N1c01hbmFnZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc291cmNlTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcInJlc291cmNlTWFuYWdlclwiKTtcblxuLyoqXG4gKiBUaGUgSG9zdCBjb21wb25lbnQgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgY29udGVudCBvZiBhIHdlYiBhcHAuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ob3N0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItaG9zdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItaG9zdD48L21vbnN0ZXItaG9zdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvaG9zdC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgaG9zdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEhvc3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0XG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBob3N0IGNvbXBvbmVudFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuICovXG5jbGFzcyBIb3N0IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L0hvc3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5nZXRDb25maWcoa2V5KTtcblx0fVxuXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5oYXNDb25maWcoa2V5KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5kZWxldGVDb25maWcoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uc2V0Q29uZmlnKGtleSwgdmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwiXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cdFx0aWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsgb25jZTogdHJ1ZSB9LFxuXHRcdFx0XHQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHdpbmRvd1JlYWR5KTtcblxuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRUcmFuc2xhdGlvbnMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZm9jdXNNYW5hZ2VyU3ltYm9sXSA9IG5ldyBGb2N1c01hbmFnZXIodGhpcyk7XG5cdFx0dGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdID0gbmV3IFJlc291cmNlTWFuYWdlcih0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXS5hdmFpbGFibGUoKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgUHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NIGFuZCBhbGwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuXG5cdCAqIElmIHRoZSBlbGVtZW50IGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIERPTSwgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRvblJlYWR5KCkge1xuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbcHJvbWlzZXNTeW1ib2xdKS50aGVuKCgpID0+IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jL21vbnN0ZXIvTW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyLmh0bWx8TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdGdldCBmb2N1c01hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZm9jdXNNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jL21vbnN0ZXIvTW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyLmh0bWx8TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdGdldCByZXNvdXJjZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0dG9nZ2xlT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS50b2dnbGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRvcGVuT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5vcGVuKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7SG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0Y2xvc2VPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsb3NlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWhvc3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0hvc3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5JMThuLkxvY2FsZX1cblx0ICovXG5cdGdldCBsb2NhbGUoKSB7XG5cdFx0cmV0dXJuIGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0Z2V0IHRyYW5zbGF0aW9ucygpIHtcblx0XHRyZXR1cm4gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xNZXNzYWdlfSBtZXNzYWdlXG5cdCAqL1xuXHRwdXNoTm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcblx0XHRpZiAodGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gbm90aWZ5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXS5wdXNoKG1lc3NhZ2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW92ZXJsYXlcIik7XG5cdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW5vdGlmeVwiKTtcblx0dGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCIsXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGluaXRUcmFuc2xhdGlvbnMoKSB7XG5cdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3QtY29udGFpbmVyLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWVcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEhvc3QpO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge092ZXJsYXlTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgT3ZlcmxheVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBPdmVybGF5U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBvdmVybGF5IHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowO2JvcmRlci1zaGFkb3c6bm9uZX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWZvcm17YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1vbnN0ZXItZm9ybSBsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpncmlkfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pIGlucHV0e21hcmdpbi1sZWZ0Oi40cmVtO21hcmdpbi1yaWdodDouNHJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl+bGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKXttYXJnaW4tdG9wOi4ycmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pIGlucHV0e21hcmdpbi1sZWZ0Oi40cmVtO21hcmdpbi1yaWdodDouNHJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl+bGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKXttYXJnaW4tdG9wOi4ycmVtfS5tb25zdGVyLWZvcm0gbGFiZWx+ZmllbGRzZXQsLm1vbnN0ZXItZm9ybSBsYWJlbH5sYWJlbHttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6LjRyZW0gLjZyZW19Lm1vbnN0ZXItZm9ybSBidXR0b257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWZvcm0gb3B0aW9uOmNoZWNrZWQsLm1vbnN0ZXItZm9ybSBvcHRpb246Zm9jdXMsLm1vbnN0ZXItZm9ybSBvcHRpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXtib3JkZXI6MDtib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItYm90dG9tOnRoaW4gdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbjtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBsYWJlbCBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsIHNlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsIHRleHRhcmVhLC5tb25zdGVyLWZvcm0gbGFiZWwraW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCtzZWxlY3QsLm1vbnN0ZXItZm9ybSBsYWJlbCt0ZXh0YXJlYXttYXJnaW4tdG9wOi4ycmVtO3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjIuNXJlbSAycmVtIDJyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0IGxlZ2VuZHtmb250LXNpemU6LjhyZW07bWF4LXdpZHRoOjk1JTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMXJlbSAycmVtIC4ycmVtIC41cmVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0b3A6MDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldH5maWVsZHNldHttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b257bWFyZ2luOi4ycmVtIDB9Lm1vbnN0ZXItZm9ybSBidXR0b246Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b246bGFzdC1vZi10eXBle21hcmdpbi1ib3R0b206MXJlbX0ubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZTpub25lfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpey5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmb2N1cywubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLC5tb25zdGVyLWZvcm0gc2VsZWN0OmZvY3VzLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweH19Lm1vbnN0ZXItZm9ybSBidXR0b246aG92ZXIsLm1vbnN0ZXItZm9ybSBpbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSwubW9uc3Rlci1mb3JtIHNlbGVjdDpob3ZlciwubW9uc3Rlci1mb3JtIHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjFweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLmhpZGUtZW1wdHl7ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3RyYW5zaXRpb246LjVzO3dpZHRoOjA7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzKX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNMSAyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgN2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDEyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XS5vcGVue3dpZHRoOjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgc2NodWthaSBHbWJIXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L292ZXJsYXkubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlDbG9zZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5T3BlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJvcGVuRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOID0gXCJvdmVybGF5LW9wZW5cIjtcblxuLyoqXG4gKiBUaGUgT3ZlcmxheSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGFuIG92ZXJsYXkgYW5kIGEgYnV0dG9uIHRvIG9wZW4gdGhlIG92ZXJsYXkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9vdmVybGF5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItb3ZlcmxheSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItb3ZlcmxheT48L21vbnN0ZXItb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2Uvb3ZlcmxheS5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgb3ZlcmxheS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBPdmVybGF5XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBzaW1wbGUgb3ZlcmxheSBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcbiAqL1xuY2xhc3MgT3ZlcmxheSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2FycmF5fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5uYW1lIE5hbWUgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY29udGVudCBDb250ZW50IG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNsYXNzIENzcyBjbGFzcyBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENzcyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJvZHkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIGJvZHkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm92ZXJsYXkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIG92ZXJsYXkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZXNjYXBlS2V5IElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIGNsb3NlZCB3aXRoIHRoZSBlc2NhcGUga2V5XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMub3BlbkJ1dHRvbiBJZiB0cnVlIHRoZSBvdmVybGF5IGNhbiBiZSBvcGVuZWQgd2l0aCBhIGJ1dHRvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0b3ZlcmxheTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250ZW50XCIsXG5cdFx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdFx0Y2xhc3M6IFwiXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRib2R5OiBcImhpZGRlblwiLFxuXHRcdFx0XHRvdmVybGF5OiBcImhpZGUtZW1wdHlcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRlc2NhcGVLZXk6IHRydWUsXG5cdFx0XHRcdG9wZW5CdXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgc2Nyb2xsIGJhciBhbHdheXNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktb3BlblxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlLWVtcHR5XCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktb3BlblwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1vdmVybGF5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtPdmVybGF5U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZChcIm92ZXJsYXlcIik7XG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXVwiLFxuXHQpO1xuXHR0aGlzW292ZXJsYXlPcGVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fTtcblxuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdKTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lc2NhcGVLZXlcIikgPT09IHRydWUpIHtcblx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0XHRjb25zdCBpc05vdENvbWJpbmVkS2V5ID0gIShcblx0XHRcdFx0XHRldmVudC5jdHJsS2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuYWx0S2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuc2hpZnRLZXlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGlzTm90Q29tYmluZWRLZXkpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZU92ZXJsYXkoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpob3N0LW92ZXJsYXkuY29udGVudFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwicGFydCBwYXRoOmhvc3Qtb3ZlcmxheS5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm92ZXJsYXlcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1vcGVuXCIgcGFydD1cIm9wZW5cIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5vcGVuQnV0dG9uIHwgaWY6dmlzaWJsZTpoaWRkZW5cIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheVwiIHBhcnQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLWluc2VydD1cImhvc3Qtb3ZlcmxheSBwYXRoOm92ZXJsYXlcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLm92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LWNsb3NlXCIgcGFydD1cImNsb3NlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChPdmVybGF5KTtcbiIsICJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgY29uZmlndXJhdGlvbiBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJvd3NlciBsb2NhdGlvbixcbiAqIGNvbXBvbmVudCBuYW1lLCBpZCwgYW5kIGEgcHJlZml4LlxuICpcbiAqIEBzaW5jZSAzLjU1LjAgdGhlIGZ1bmN0aW9uIHJlbW92ZSB0aGUgaGFzaCBmcm9tIHRoZSBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIEEgcHJlZml4IHRvIHVzZSBpbiB0aGUgdW5pcXVlIGtleS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5LlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KSB7XG5cdC8vIEdldCB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnNcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IGdldFdpbmRvdygpLmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdO1xuXG5cdC8vIFdpdGhvdXQgaGFzaCAoc2luY2UgMy41NS4wKVxuXHRjb25zdCB1cmxXaXRob3V0UGFyYW1zQW5kSGFzaCA9IHVybFdpdGhvdXRQYXJhbXMuc3BsaXQoXCIjXCIpWzBdO1xuXG5cdC8vIENvbWJpbmUgdGhlIHBhcnRzIHRvIGNyZWF0ZSBhIHVuaXF1ZSBrZXlcblx0Y29uc3QgdW5pcXVlS2V5ID0gYCR7cHJlZml4fV8ke3VybFdpdGhvdXRQYXJhbXNBbmRIYXNofV8ke2NvbXBvbmVudE5hbWV9XyR7aWR9YDtcblxuXHQvLyBSZXBsYWNlIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG5cdHJldHVybiB1bmlxdWVLZXkucmVwbGFjZSgvW15cXHdcXHNdL2dpLCBcIl9cIikucmVwbGFjZSgvXFxzKy9nLCBcIl9cIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7RGV0YWlsc1N0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBEZXRhaWxzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIERldGFpbHNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGRldGFpbHMgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoxcHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9jb21wb25lbnQtZm9ybVxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtDb2xsYXBzZVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb2xsYXBzZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBDb2xsYXBzZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgY29sbGFwc2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoxcHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9Lm92ZXJmbG93LWhpZGRlbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbntib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtoZWlnaHQ6MDtsaW5lLWhlaWdodDoxLjQ7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdIC5wYWRkaW5ne3BhZGRpbmc6MXJlbX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0gLmRlY28tbGluZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTtib3JkZXI6MDtoZWlnaHQ6MnB4O21hcmdpbjowO3BhZGRpbmc6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSAuZGVjby1saW5le2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2hlaWdodDp2YXIoLS1tb25zdGVyLWhlaWdodCl9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgc2NodWthaSBHbWJIXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNTbG90RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNTbG90RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzQ29udGFpbmVyRWxlbWVudFwiKTtcbi8qKlxuXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0RlY29FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBuYW1lU3ltYm9sID0gU3ltYm9sKFwibmFtZVwiKTtcblxuLyoqXG4gKiBUaGUgQ29sbGFwc2UgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhIGRldGFpbHMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jb2xsYXBzZS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbGxhcHNlIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbGxhcHNlJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29sbGFwc2U+PC9tb25zdGVyLWNvbGxhcHNlPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2NvbGxhcHNlLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbGxhcHNlJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgY29sbGFwc2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDb2xsYXBzZVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGNvbGxhcHNlIGNvbXBvbmVudFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtY2xvc2VkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1hZGp1c3QtaGVpZ2h0XG4gKi9cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbGxhcHNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQvLyB0aGUgbmFtZSBpcyBvbmx5IHVzZWQgZm9yIHRoZSBob3N0IGNvbmZpZyBhbmQgdGhlIGV2ZW50IG5hbWVcblx0XHR0aGlzW25hbWVTeW1ib2xdID0gXCJjb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmNvbnRhaW5lciBDU1MgY2xhc3MgZm9yIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmFjY29yZGlvbiBFbmFibGUgYWNjb3JkaW9uIG1vZGVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wZXJzaXN0U3RhdGUgRW5hYmxlIHBlcnNpc3Qgc3RhdGUgKEhvc3QgYW5kIENvbmZpZy1NYW5hZ2VyIHJlcXVpcmVkKVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlcyBVc2Ugc2Nyb2xsIHZhbHVlcyAoc2Nyb2xsSGVpZ2h0KSBpbnN0ZWFkIG9mIGNsaWVudEhlaWdodCBmb3IgdGhlIGhlaWdodCBjYWxjdWxhdGlvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRjb250YWluZXI6IFwicGFkZGluZ1wiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGFjY29yZGlvbjogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdFN0YXRlOiB0cnVlLFxuXHRcdFx0XHR1c2VTY3JvbGxWYWx1ZXM6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnLmNhbGwodGhpcyk7XG5cdFx0aW5pdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0XHQvLyAgdGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShnZXREb2N1bWVudCgpLmJvZHkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdC8vdGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiAhdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNPcGVuKCkge1xuXHRcdHJldHVybiAhdGhpcy5pc0Nsb3NlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLW9wZW5cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2Utb3BlblxuXHQgKi9cblx0b3BlbigpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5hY2NvcmRpb25cIikgPT09IHRydWUpIHtcblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLW9wZW5cIiwge30pO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1jbG9zZWRcblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm92ZXJmbG93LWhpZGRlblwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb2xsYXBzZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gYSBkb2N1bWVudCwgaW5jbHVkaW5nIGludG8gYSBzaGFkb3cgdHJlZS5cblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWFkanVzdC1oZWlnaHRcblx0ICovXG5cdGFkanVzdEhlaWdodCgpIHtcblx0XHRhZGp1c3RIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5mdW5jdGlvbiBhZGp1c3RIZWlnaHQoKSB7XG5cdGxldCBoZWlnaHQgPSAwO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodDtcblx0XHR9XG5cdH1cblxuXHRpZiAodGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQgKyAxO1xuXHRcdH1cblx0fVxuXG5cdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCA9IHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblxuXHRcdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRcdGhlaWdodCA9IFwiYXV0b1wiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRoZWlnaHQgKz0gXCJweFwiO1xuXHR9XG5cblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XCItLW1vbnN0ZXItaGVpZ2h0XCIsXG5cdFx0aGVpZ2h0LFxuXHRcdFwiaW1wb3J0YW50XCIsXG5cdCk7XG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYWRqdXN0LWhlaWdodFwiLCB7fSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24oKSB7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblxuXHRjb25zdCBzbG90dGVkTm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0c2xvdHRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKG5vZGUpO1xuXHR9KTtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKTtcblx0fVxuXG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0aW5pdFNsb3RDaGFuZ2VkSGFuZGxlci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5pdFNsb3RDaGFuZ2VkSGFuZGxlcigpIHtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsICgpID0+IHtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFwiKTtcblx0dGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRlY29dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0tleSgpIHtcblx0cmV0dXJuIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KHRoaXNbbmFtZVN5bWJvbF0sIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlU3RhdGVDb25maWcoKSB7XG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0aG9zdC5zZXRDb25maWcoY29uZmlnS2V5LCB0aGlzLmlzT3BlbigpKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBTdHJpbmcoZXJyb3IpKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gaW5pdFN0YXRlRnJvbUhvc3RDb25maWcoKSB7XG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgaG9zdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLWhvc3RcIik7XG5cblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Ly8gTm90IHdvcmtpbmcgcHJvcHBlclxuXHQvLyBpZiAoIShob3N0IGluc3RhbmNlb2YgSG9zdCkpIHtcblx0Ly8gICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgaG9zdCBtdXN0IGJlIGEgbW9uc3Rlci1ob3N0XCIpO1xuXHQvLyB9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cdHJldHVybiBob3N0XG5cdFx0LmdldENvbmZpZyhjb25maWdLZXkpXG5cdFx0LnRoZW4oKHN0YXRlKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlcnJvci50b1N0cmluZygpKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQoKSB7XG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5jb250YWluZXJcIiBwYXJ0PVwiY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVjby1saW5lXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJkZWNvXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbGxhcHNlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgSG9zdCB9IGZyb20gXCIuL2hvc3QubWpzXCI7XG5pbXBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZGV0YWlscy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH0gZnJvbSBcIi4vY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGUgRGV0YWlscyBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGEgZGV0YWlscy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2RldGFpbHMucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1kZXRhaWxzIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1kZXRhaWxzPjwvbW9uc3Rlci1kZXRhaWxzPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LXN0YXRlL3NvdXJjZS9kZXRhaWxzLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBkZXRhaWxzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ29sbGFwc2VcbiAqIENvbGxhcHNlIDx8LS0gRGV0YWlsc1xuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGRldGFpbHMgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuRGV0YWlscy5ldmVudDptb25zdGVyLWRldGFpbHMtYmVmb3JlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5EZXRhaWxzLmV2ZW50Om1vbnN0ZXItZGV0YWlscy1vcGVuXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuRGV0YWlscy5ldmVudDptb25zdGVyLWRldGFpbHMtYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuRGV0YWlscy5ldmVudDptb25zdGVyLWRldGFpbHMtY2xvc2VkXG4gKi9cbmNsYXNzIERldGFpbHMgZXh0ZW5kcyBDb2xsYXBzZSB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2RldGFpbHNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5idXR0b24gQ1NTIGNsYXNzIGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBidXR0b24gQnV0dG9uIGNvbmZpZ3VyYXRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJ1dHRvbi5sYWJlbCBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmFjY29yZGlvbiBFbmFibGUgYWNjb3JkaW9uIG1vZGVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wZXJzaXN0U3RhdGUgUGVyc2lzdCB0aGUgc3RhdGUgaW4gdGhlIGhvc3QgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJEZXRhaWxzXCIsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5EZXRhaWxzfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRCdXR0b25MYWJlbC5jYWxsKHRoaXMpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBjb250YWluRG9jdW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cblx0XHRpZiAoY29udGFpbkRvY3VtZW50ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC50YWdOYW1lID09PSBcIk1PTlNURVItREVUQUlMU1wiKSB7XG5cdFx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc3R5bGUuYm9yZGVyVG9wID0gXCIwXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1kZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBjc3MgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y3NzLnB1c2goRGV0YWlsc1N0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBjc3M7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH07XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW5pdEJ1dHRvbkxhYmVsKCkge1xuXHRsZXQgbGFiZWw7XG5cdGNvbnN0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSB0aGlzLmlubmVyVGV4dDtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKGxhYmVsLmxlbmd0aCA+IDEwMCkge1xuXHRcdGxhYmVsID0gYCR7bGFiZWwuc3Vic3RyaW5nKDAsIDk5KX1cdTIwMjZgO1xuXHR9XG5cblx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCwgbGFiZWwpO1xuXHR0aGlzLnNldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgbGFiZWwpO1xuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoXCJkZXRhaWxzXCIsIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3VtbWFyeVwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uIHwgZGVmYXVsdDpjbGljayBtZVwiPmNsaWNrIG1lXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGV0YWlscyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuL2lkLm1qc1wiO1xuXG5leHBvcnQgeyBSYW5kb21JRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgaW50ZXJuYWxDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgYFJhbmRvbUlEYCBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgYW4gaXRlbS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBjbGFzcyB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xuICovXG5jbGFzcyBSYW5kb21JRCBleHRlbmRzIElEIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyICs9IDE7XG5cblx0XHR0aGlzLmlkID1cblx0XHRcdGdldEdsb2JhbCgpXG5cdFx0XHRcdC5idG9hKHJhbmRvbSgxLCAxMDAwMCkpXG5cdFx0XHRcdC5yZXBsYWNlKC89L2csIFwiXCIpXG5cdFx0XHRcdC8qKiBObyBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIElELCBiZWNhdXNlIG9mIHBvc3NpYmxlIHByb2JsZW1zIHdpdGggRE9NICovXG5cdFx0XHRcdC5yZXBsYWNlKC9eWzAtOV0rLywgXCJYXCIpICsgaW50ZXJuYWxDb3VudGVyO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBVVUlEIH07XG5cbi8qKlxuICogVGhlIFVVSUQgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IGEgdW5pcXVlIFVVSUQgZm9yIGFuIG9iamVjdC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkXG4gKi9cbmNsYXNzIFVVSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0bGV0IHV1aWQgPSBjcmVhdGVXaXRoQ3J5cHRvKCk7XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR1dWlkID0gY3JlYXRlV2l0aFJhbmRvbSgpO1xuXHRcdH1cblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dmFsdWU6IHV1aWQsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ2YWx1ZVwiXTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoUmFuZG9tKCkge1xuXHRyZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0Y29uc3QgciA9IChyYW5kb20oMCwgNjUwMDApICogMTYpIHwgMDtcblx0XHRjb25zdCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuXHRcdHJldHVybiB2LnRvU3RyaW5nKDE2KVswXTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhDcnlwdG8oKSB7XG5cdGNvbnN0IGNyeXB0ID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3J5cHRvXCIpO1xuXHRpZiAoIWlzT2JqZWN0KGNyeXB0KSkgcmV0dXJuO1xuXHRpZiAodHlwZW9mIGNyeXB0Py5bXCJyYW5kb21VVUlEXCJdKSByZXR1cm47XG5cdHJldHVybiBjcnlwdC5yYW5kb21VVUlEKCk7XG59XG4iLCAiaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG5cbiAgICAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBzYXlzd2hvID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsIHRlbSxcbiAgICAgICAgICAgICAgICBNID0gdWEubWF0Y2goLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pKSB8fCBbXTtcbiAgICAgICAgICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiAnSUUgJyArICh0ZW1bMV0gfHwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gdWEubWF0Y2goL1xcYihPUFJ8RWRnZSlcXC8oXFxkKykvKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtICE9IG51bGwpIHJldHVybiB0ZW0uc2xpY2UoMSkuam9pbignICcpLnJlcGxhY2UoJ09QUicsICdPcGVyYScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTSA9IE1bMl0gPyBbTVsxXSwgTVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgICAgIGlmICgodGVtID0gdWEubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSkpICE9IG51bGwpIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XG4gICAgICAgICAgICByZXR1cm4gTS5qb2luKCcgJyk7XG4gICAgICAgIH0pKCk7XG5cblxuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJylcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgKz0gXCIgXCIgKyBzYXlzd2hvO1xuXG4gICAgfSkoKTtcblxuXG59XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci10YWJzIGlkPVwibXl0YWJzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgRGFzIGlzdCB0YWIgMVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjJcIj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAzIG9obmUgYnV0dG9uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvbW9uc3Rlci10YWJzPlxuYDtcblxubGV0IFRhYnM7XG5cbmRlc2NyaWJlKCdUYWJzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUYWJzID0gbVsnVGFicyddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIHRhYnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215dGFicycpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0YWJzKS5pcy5pbnN0YW5jZW9mKFRhYnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hdiA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCduYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3BhcnQ9YnV0dG9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnNbMF0pLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5hdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9ucy5sZW5ndGgpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCBjaGFpIGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IGNoYWkudmVyc2lvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb25FcnJvciA9IGNoYWkuQXNzZXJ0aW9uRXJyb3I7XG5leHBvcnQgY29uc3QgdXRpbCA9IGNoYWkudXRpbDtcbmV4cG9ydCBjb25zdCBjb25maWcgPSBjaGFpLmNvbmZpZztcbmV4cG9ydCBjb25zdCB1c2UgPSBjaGFpLnVzZTtcbmV4cG9ydCBjb25zdCBzaG91bGQgPSBjaGFpLnNob3VsZDtcbmV4cG9ydCBjb25zdCBhc3NlcnQgPSBjaGFpLmFzc2VydDtcbmV4cG9ydCBjb25zdCBjb3JlID0gY2hhaS5jb3JlO1xuXG5leHBvcnQgZGVmYXVsdCBjaGFpO1xuIiwgIi8qKioqKioqKlxuXG4gQ29udmVydCBjaGFpLWRvbSAxLjguMSB0byBlcyBtb2R1bGUsIHdpdGhvdXQgYW55IG90aGVyIG1vZGlmaWNhdGlvbi5cbiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vYmxvYi84NmMzNDIzL2NoYWktZG9tLmpzXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vaXNzdWVzLzM4XG5cbiBVc2FnZTpcbiBpbXBvcnQgeyBjaGFpRG9tIH0gZnJvbSAnPHBhdGgtdG8+L2NoYWktZG9tJztcbiBjaGFpLnVzZShjaGFpRG9tKTtcblxuIENvcHlyaWdodCAoYykgMjAxNSBOYXRoYW4gQmxhY2sgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuXG4gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UuIEZvciBhIGNvcHksIHNlZSA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+LlxuXG4gKioqKioqKioqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWlEb20oY2hhaSwgdXRpbHMpIHtcbiAgICB2YXIgZmxhZyA9IHV0aWxzLmZsYWcsXG5cbiAgICAgICAgZWxUb1N0cmluZyA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICBsZXQgZGVzY1xuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3QoZWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdlbXB0eSBOb2RlTGlzdCdcbiAgICAgICAgICAgICAgICBkZXNjID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWwsIDAsIDUpLm1hcChlbFRvU3RyaW5nKS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmxlbmd0aCA+IDUgPyBkZXNjICsgJy4uLiAoKycgKyAoZWwubGVuZ3RoIC0gNSkgKyAnIG1vcmUpJyA6IGRlc2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICBpZiAoZWwuaWQpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcjJyArIGVsLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnLicgKyBTdHJpbmcoZWwuY2xhc3NOYW1lKS5yZXBsYWNlKC9cXHMrL2csICcuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICdjbGFzcycgJiYgYXR0ci5uYW1lICE9PSAnaWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2MgKz0gJ1snICsgYXR0ci5uYW1lICsgKGF0dHIudmFsdWUgPyAnPVwiJyArIGF0dHIudmFsdWUgKyAnXCJdJyA6ICddJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NcbiAgICAgICAgfSxcblxuICAgICAgICBhdHRyQXNzZXJ0ID0gZnVuY3Rpb24obmFtZSwgdmFsKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpXG5cbiAgICAgICAgICAgIGlmICghZmxhZyh0aGlzLCAnbmVnYXRlJykgfHwgdW5kZWZpbmVkID09PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgISFlbC5hdHRyaWJ1dGVzW25hbWVdXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgbmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9PT0gYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsIHZhbFxuICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzSFRNTEVsZW1lbnQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSAxIC8vIHdpbmRvdy5Ob2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzTm9kZUxpc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTm9kZUxpc3RdJ1xuICAgICAgICB9XG5cbiAgICB1dGlscy5lbFRvU3RyaW5nID0gZWxUb1N0cmluZ1xuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cicsIGF0dHJBc3NlcnQpXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyaWJ1dGUnLCBhdHRyQXNzZXJ0KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdjbGFzcycsIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsIGNsYXNzTmFtZVxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaWQnLCBmdW5jdGlvbihpZCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmlkID09IGlkXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsIGlkXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdodG1sJywgZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykuaW5uZXJIVE1MXG5cbiAgICAgICAgaWYgKGZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbC5pbmRleE9mKGh0bWwpID49IDBcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gbm90IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gaHRtbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBIVE1MICN7ZXhwfSwgYnV0IHRoZSBIVE1MIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgndHJpbW1lZCcsIG51bGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICBmbGFnKHRoaXMsICd0cmltLXRleHQnLCB0cnVlKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3RleHQnLCBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpLFxuICAgICAgICAgICAgdHJpbSA9IGZsYWcodGhpcywgJ3RyaW0tdGV4dCcpLCBhY3R1YWwsIHJlc3VsdFxuXG4gICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiB0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQgfSlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICB0ZXh0W2ZsYWcodGhpcywgJ25lZ2F0ZScpID8gJ3NvbWUnIDogJ2V2ZXJ5J10oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwob2JqLCBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50KSA9PT0gdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICB1dGlscy5lcWwoYWN0dWFsLCB0ZXh0KVxuXG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oKVxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmpvaW4oKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbignJylcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IHRyaW0gPyBvYmoudGV4dENvbnRlbnQudHJpbSgpIDogb2JqLnRleHRDb250ZW50XG4gICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYmpEZXNjID0gZWxUb1N0cmluZyhvYmopLCB0ZXh0TXNnID0gdHJpbSA/ICd0cmltbWVkIHRleHQnIDogJ3RleHQnXG4gICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3ZhbHVlJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIHZhbHVlICN7ZXhwfSdcbiAgICAgICAgICAgICwgdmFsdWVcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2V4aXN0JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCBhbiBlbXB0eSBOb2RlTGlzdCB0byBoYXZlIG5vZGVzJ1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgZXhpc3QnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopIHx8IGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gb2JqLmNoaWxkcmVuID8gb2JqLmNoaWxkcmVuLmxlbmd0aCA6IG9iai5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxMZW5ndGggPT09IGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSAje2V4cH0gY2hpbGRyZW4gYnV0IGl0IGhhZCAje2FjdH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSAje2V4cH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ21hdGNoJywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAoISFvYmoubGVuZ3RoICYmIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpIH0pKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudCcsIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBzdWJpdGVtXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICEhYWN0dWFsXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudHMnLCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAhIWFjdHVhbC5sZW5ndGhcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCBzZWxlY3RvcilcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZGlzcGxheWVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZGlzcGxheSA6IGVsLnN0eWxlLmRpc3BsYXlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ25vbmUnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBub3QnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgYXMgJyArIGFjdHVhbFxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndmlzaWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnZpc2liaWxpdHkgOiBlbC5zdHlsZS52aXNpYmlsaXR5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdoaWRkZW4nICYmIGFjdHVhbCAhPT0gJ2NvbGxhcHNlJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSB2aXNpYmxlLCBidXQgaXQgd2FzICcgKyAoYWN0dWFsID09PSAnaGlkZGVuJyA/ICdoaWRkZW4nIDogJ2NvbGxhcHNlZCcpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSB2aXNpYmxlLCBidXQgaXQgd2FzJ1xuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG59IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPSBuZXcgRnVuY3Rpb24oXCJ0cnkge3JldHVybiB0aGlzPT09d2luZG93O31jYXRjaChlKXsgcmV0dXJuIGZhbHNlO31cIik7XG5leHBvcnQgY29uc3QgaXNOb2RlID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PWdsb2JhbDt9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlO31cIik7XG5cbmxldCBKU0RPTUV4cG9ydCA9IG51bGw7XG5cbi8qKlxuICogdGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZG9tIHN0YWNrIGluIHRoZSBub2RlIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPnxQcm9taXNlPHZvaWQ+fVxuICovXG5mdW5jdGlvbiBpbml0SlNET00ob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvd1snRE9NUGFyc2VyJ10pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IGcgPSBnZXRHbG9iYWwoKTtcblxuICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIHtcbiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQvaHRtbFwiLFxuICAgICAgICBpbmNsdWRlTm9kZUxvY2F0aW9uczogdHJ1ZSxcbiAgICAgICAgc3RvcmFnZVF1b3RhOiAxMDAwMDAwMCxcbiAgICAgICAgcnVuU2NyaXB0czogXCJkYW5nZXJvdXNseVwiLFxuICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICB9LCBvcHRpb25zIHx8IHt9KVxuXG4gICAgcmV0dXJuIGltcG9ydChcImpzZG9tXCIpLnRoZW4oKHtKU0RPTX0pID0+IHtcbiAgICAgICAgSlNET01FeHBvcnQgPSBKU0RPTTtcbiAgICAgICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oYDxodG1sPlxuPGhlYWQ+XG48L2hlYWQ+XG48Ym9keT5cbjxkaXYgaWQ9XCJtb2Nrc1wiPjwvZGl2PlxuPC9ib2R5PmAsIG9wdGlvbnMpO1xuXG4gICAgICAgIGdbJ3dpbmRvdyddID0gd2luZG93O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICAgICAgICdDU1NTdHlsZVNoZWV0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbUVsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ0N1c3RvbUV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NUGFyc2VyJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudEludGVybmFscycsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudFRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRm9ybUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTElucHV0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2NyaXB0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2VsZWN0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxUZXh0QXJlYUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSW5wdXRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdLZXlib2FyZEV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ011dGF0aW9uT2JzZXJ2ZXInLFxuICAgICAgICAgICAgICAgICAgICAnbmF2aWdhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGUnLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlTGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgICAgICAgJ1NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdba2V5XSA9IHdpbmRvd1trZXldXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCJkb20tc3RvcmFnZVwiKS50aGVuKCh7ZGVmYXVsdDogU3RvcmFnZX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGcubG9jYWxTdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBnLnNlc3Npb25TdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1snbG9jYWxTdG9yYWdlJ10gPSBnLmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93WydzZXNzaW9uU3RvcmFnZSddID0gZy5zZXNzaW9uU3RvcmFnZTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGcpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgZG9tLXN0b3JhZ2VcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7aW5pdEpTRE9NLCBKU0RPTUV4cG9ydH0gXG5cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXNwbGl0LXNjcmVlbiBpZD1cIm15LXNwbGl0LXNjcmVlblwiPlxuICAgICAgIFxuICAgIDwvbW9uc3Rlci1zcGxpdC1zY3JlZW4+XG5gO1xuXG5sZXQgU3BsaXRTY3JlZW47XG5cbmRlc2NyaWJlKCdTcGxpdFNjcmVlbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1zY3JlZW4ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1NwbGl0U2NyZWVuJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTcGxpdFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1zcGxpdC1zY3JlZW4nKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBqc2RvbS10ZXN0aW5nLW1vY2tzIG5lZWQgamVzdFxuICAgIGxldCBSZWxvYWQsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVsb2FkID0gbVsnUmVsb2FkJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKSkuaXMuaW5zdGFuY2VvZihSZWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFN0YXRlQnV0dG9uO1xuXG5kZXNjcmliZSgnU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTdGF0ZUJ1dHRvbiA9IG1bJ1N0YXRlQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBTdGF0ZUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKFN0YXRlQnV0dG9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcblxuXG5leHBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja31cblxuXG5jbGFzcyBSZXNpemVPYnNlcnZlck1vY2sge1xuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIG9ic2VydmUoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgdW5vYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZWxlbWVudHMuZmlsdGVyKChlbCkgPT4gZWwgIT09IGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUmVzaXplKGVudHJpZXMpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlbnRyaWVzLCB0aGlzKTtcbiAgICB9XG59XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJzZWxlY3RvclwiOiBcIipcIixcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTZWxlY3QsIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgaWYgKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ID0gbVsnU2VsZWN0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1dpdGggZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkFsZXhpYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIk91Z2h0cmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImFvdWdodHJpZ2h0MEBleGJsb2cuanBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJBZ2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm1uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihKU09OLnN0cmluZ2lmeShqc29uKSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3QpLmlzLmluc3RhbmNlb2YoU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2lkfScpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWR9JylcblxuICAgICAgICAgICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW9wdGlvbnMtc2V0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMFwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTFcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0yXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5ub3QuaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTNcIicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG9wdGlvbnMucGFyZW50Tm9kZS5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBvcHRpb25zLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY2hpbGRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtEYXRhc291cmNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cbmltcG9ydCB7c3RvcmFnZU9iamVjdFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTJcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlPVwibG9jYWxzdG9yYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHM9J1widGVzdC1rZXlcIic+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDJcIlxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YlwiPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xubGV0IGh0bWwzID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0M1wiPlxuICAgICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTNcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDpiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbjFcIiBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1oYW5kbGVyPVwid3JpdGVcIj5CdXR0b248L2J1dHRvbj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZvcm07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVzdC1rZXknKVxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKFwicmVnaXN0ZXIgb3duIGRhdGFzb3VyY2VzXCIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW0gPSBTeW1ib2wuZm9yKCdAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9AQGRhdGEnKTtcblxuICAgICAgICBsZXQgdGVzdDNEYXRhc291cmNlID0gY2xhc3MgZXh0ZW5kcyBEYXRhc291cmNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tzeW1dLnNldFN1YmplY3Qoe2E6IFwidGVzdDNcIiwgYjogXCJ0ZXN0M1wifSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltzeW1dLmdldFJlYWxTdWJqZWN0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcblxuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgICAgICBmb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciBvd24gZGF0YXNvdXJjZXNcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBtID0gZm9ybS5nZXREYXRhc291cmNlcygndGVzdDMnKVxuICAgICAgICAgICAgZXhwZWN0KG0uZ2V0KCd0ZXN0MycpKS5pcy5hLmVxdWFsKHRlc3QzRGF0YXNvdXJjZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhc291cmNlID0gbmV3IHRlc3QzRGF0YXNvdXJjZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMycpO1xuICAgICAgICAgICAgZm9ybUVsZW1lbnQuc2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiLCB0ZXN0RGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBmb3JtRWxlbWVudC5yZWZyZXNoKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IGZvcm1FbGVtZW50LmdldFZhbHVlcygpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHYpLmlzLmRlZXAuZXF1YWwoe2E6IFwidGVzdDNcIiwgYjogXCJ0ZXN0M1wifSlcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoXCJyZWdpc3RlciBhbmQgdW5yZWdpc3RlciBkYXRhc291cmNlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFRlc3REYXRhc291cmNlID0gY2xhc3MgZXh0ZW5kcyBEYXRhc291cmNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpdChcInNob3VsZCByZWdpc3RlciBuZXcgZGF0YXNvdXJjZVwiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGZvcm0ucmVnaXN0ZXJEYXRhc291cmNlKCd0ZXN0JywgVGVzdERhdGFzb3VyY2UpO1xuICAgICAgICAgICAgbGV0IG0gPSBmb3JtLmdldERhdGFzb3VyY2VzKCd0ZXN0JylcbiAgICAgICAgICAgIGV4cGVjdChtLmdldCgndGVzdCcpKS5pcy5hLmVxdWFsKFRlc3REYXRhc291cmNlKTtcblxuICAgICAgICAgICAgZm9ybS51bnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdCcpO1xuICAgICAgICAgICAgbSA9IGZvcm0uZ2V0RGF0YXNvdXJjZXMoJ3Rlc3QnKVxuXG4gICAgICAgICAgICBleHBlY3QobS5nZXQoJ3Rlc3QnKSkudG8uYmUudW5kZWZpbmVkO1xuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoXCJleGFtcGxlNC1kb2NcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0IGJ1dHRvbiB3aXRoIGNsaWNrIGV2ZW50XCIsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBjbGFzcyBNb2NrRGF0YXNvdXJjZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm00ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZTQgPSBuZXcgTW9ja0RhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZTQgaW5zdGFuY2VvZiBEYXRhc291cmNlKS5pcy50cnVlO1xuICAgICAgICAgICAgICAgIGZvcm00LnNldE9wdGlvbignZGF0YXNvdXJjZScsIGRhdGFzb3VyY2U0KVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgICAgICAgICAgICAgIGlucHV0NC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZmllbGQnKTtcbiAgICAgICAgICAgICAgICBpbnB1dDQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItYXR0cmlidXRlcycsICd2YWx1ZSBwYXRoOmhlYWRlcnMuSG9zdCcpO1xuICAgICAgICAgICAgICAgIGlucHV0NC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1iaW5kJywgJ3BhdGg6aGVhZGVycy5Ib3N0Jyk7XG4gICAgICAgICAgICAgICAgZm9ybTQuYXBwZW5kQ2hpbGQoaW5wdXQ0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbjQuc2V0T3B0aW9uKCdsYWJlbHMuYnV0dG9uJywgJ2NsaWNrIScpXG4gICAgICAgICAgICAgICAgYnV0dG9uNC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1kYXRhc291cmNlLWhhbmRsZXInLCAnd3JpdGUnKVxuICAgICAgICAgICAgICAgIGJ1dHRvbjQuc2V0T3B0aW9uKCdhY3Rpb25zLmNsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZm9ybTQuYXBwZW5kQ2hpbGQoYnV0dG9uNCk7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZChmb3JtNCk7XG5cbiAgICAgICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b240LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9XG4gICAgKVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gb2JqZWN0bGluaycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1mb3JtPicpXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIVE1MLVRlbXBsYXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCAne30nKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYjogNyxcbiAgICAgICAgICAgICAgICAgICAgYzogWzEsIDUsIDZdLFxuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY2xpY2snLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm0uc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKCdubyBzaGFkb3dSb290JykpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc2xvdCcpLmFzc2lnbmVkRWxlbWVudHMoKVswXS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wxLmNsaWNrKCk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSwgMSlcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxufSlcbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci10cmVlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCIsXG4gICAgXCJzZWxlY3RvclwiOiBcIipcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci10cmVlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUcmVlU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1RyZWVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUcmVlU2VsZWN0ID0gbVsnVHJlZVNlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdHJlZS1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpKS5pcy5pbnN0YW5jZW9mKFRyZWVTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7bGFzdF9uYW1lfScpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZCB8IHRvc3RyaW5nIH0nKTtcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0cmVlc2VsZWN0KTtcblxuICAgICAgICAgICAgXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IEJ1dHRvbjtcblxuZGVzY3JpYmUoJ0J1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBCdXR0b24gPSBtWydCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKEJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQgeyBjaGFpRG9tIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQgeyBpbml0SlNET00gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICA8bW9uc3Rlci10b2dnbGUtc3dpdGNoPjwvbW9uc3Rlci10b2dnbGUtc3dpdGNoPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFRvZ2dsZVN3aXRjaDtcblxuZGVzY3JpYmUoJ1RvZ2dsZVN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVG9nZ2xlU3dpdGNoID0gbVsnVG9nZ2xlU3dpdGNoJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUb2dnbGVTd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgbW9uc3Rlci10b2dnbGUtc3dpdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKSkuaXMuaW5zdGFuY2VvZihUb2dnbGVTd2l0Y2gpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9nZ2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3RvZ2dsZSB0byBvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZSgpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb24nKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZSBvbiB0byBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT24oKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29uJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZU9mZigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIGNzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NzcyB0b2dnbGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNldCBpbml0IHZhbHVlIHRvIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib25cIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKHRvZ2dsZVN3aXRjaCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vbiBpcyBzZXQgdG8gRWxlbWVudCBTd2l0Y2hcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IGhhc0NsYXNzQSA9IHRvZ2dsZVN3aXRjaC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXScpWzBdLmNsYXNzTGlzdC5jb250YWlucyh0b2dnbGVTd2l0Y2guZ2V0T3B0aW9uKCdjbGFzc2VzLm9uJykpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc0NsYXNzQSkuaXMudHJ1ZTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIHN3aXRjaCBvZmZcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcIm9mZlwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZXIgcHJvemVzcyBydW5zIGluIHNldFRpbWVvdXRcbiAgICAgICAgICAgICAqIHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKCk7XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vbiBpcyByZW1vdmVkIGZyb20gRWxlbWVudCBTd2l0Y2hcbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0IgID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub24nKSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhc0NsYXNzQikuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub2ZmIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGhhc0NsYXNzQyAgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vZmYnKSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhc0NsYXNzQykuaXMudHJ1ZTsgICAgXG5cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkZXNjcmliZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndGhlIGRlZmF1bHQgdmFsdWUgaXMgb2ZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZiBhbmQgcHJvdmlkZXMgdGhlIHZhbHVlIGZvciBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW5jb3JyZWN0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogZGVmaW5lIHRoZSB2YWx1ZXMgZm9yIG9uIGFuZCBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9uJywgJ3RydWUnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBcInRydWVcIiBhbmQgbm90IFwiZmFsc2VcIlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcInRlc3RcIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZiBhbmQgcHJvdmlkZXMgdGhlIHZhbHVlIGZvciBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogZGlzYWJsZWQgYXR0cmlidXRlIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGVsZW1lbnQgaGFzIGJlZW4gbW91bnRlZCBpbiB0aGUgRE9NXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIG5vdyB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy50cnVlO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NvcnJlY3QgdmFsdWVzIGFyZSBhY2NlcHRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogZGVmaW5lIHRoZSB2YWx1ZXMgZm9yIG9uIGFuZCBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9uJywgJ3RydWUnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIGNvcnJlY3RcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJ0cnVlXCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvbiBhbmQgcHJvdmlkZXMgdGhlIHZhbHVlIGZvciBvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgndHJ1ZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29uJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgbm90IHNldFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFRlbXBsYXRlLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9IG1bJ1RlbXBsYXRlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHRlbXBsYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItZmV0Y2hlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2hhZG93Um9vdCkuY29udGFpbi5odG1sKCdoZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIuZ2V0SW5zdGFuY2UoKS5lbnRlck5vZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmxldCBNZXNzYWdlO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBNZXNzYWdlID0gbVsnTWVzc2FnZSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wpLmlzLmluc3RhbmNlb2YoTWVzc2FnZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pXG4iLCAiLy9pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuLy8gY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG4vL1xuLy8gbGV0IGh0bWwxID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuLy8gICAgIDwvZGl2PlxuLy8gYDtcbi8vXG4vLyAvLyBsYW5ndWFnZT1IVE1MXG4vLyBsZXQgaHRtbDIgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4vLyAgICAgICAgIDxtb25zdGVyLW5vdGlmeSBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne30nPjwvbW9uc3Rlci1ub3RpdGZ5PlxuLy8gICAgIDwvZGl2PlxuLy8gYDtcblxubGV0IE5vdGlmeSwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdOb3RpZnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgTm90aWZ5ID0gbVsnTm90aWZ5J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBub3RpZnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpKS5pcy5pbnN0YW5jZW9mKE5vdGlmeSk7XG4gICAgICAgICAgICBcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBtZXNzYWdlcycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIG5vdGlmeS5wdXNoKFwidGhpcyBpcyBtZXNzYWdlIFwiICsgaSsrKTtcbiAgICAgICAgICAgIG5vdGlmeS5wdXNoKFwidGhpcyBpcyBtZXNzYWdlIFwiICsgaSsrKTtcbiAgICAgICAgICAgIG5vdGlmeS5wdXNoKFwidGhpcyBpcyBtZXNzYWdlIFwiICsgaSsrKTtcblxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgbXV0YXRpb25dIG9mIG11dGF0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0udGFnTmFtZSA9PT0gJ01PTlNURVItTk9USUZZJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gbm90aWZ5LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnbW9uc3Rlci1ub3RpZnktbWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIG9wdGlvbnMgKHNlZSBmZXRjaCBhYm92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG1lc3NhZ2VzLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKG1vY2tzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChub3RpZnkpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSlcbiIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0hvc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWhvc3QgaWQ9XCJob3N0MVwiPjwvbW9uc3Rlci1ob3N0PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnSG9zdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIG93biBkYXRhc291cmNlLCBhZnRlciB0aGUgZm9ybSBpcyBsb2FkZWRcbiAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgIC8vZm9ybS5yZWdpc3RlckRhdGFzb3VyY2UoJ3Rlc3QzJywgdGVzdDNEYXRhc291cmNlKTtcblxuXG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWhvc3QgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1ob3N0PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuXG5cblxuXG4gICAgfSk7XG5cblxufSk7XG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ092ZXJsYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLW92ZXJsYXkgaWQ9XCJkZXRhaWxzMVwiPjwvbW9uc3Rlci1vdmVybGF5PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnRGV0YWlscyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pOyAgICBcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChmb3JtQ29udHJvbCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnIDxtb25zdGVyLW92ZXJsYXkgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1vdmVybGF5PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuICAgIH0pO1xuXG59KTtcbiIsICIvLyBJbXBvcnQgdGhlIHJlcXVpcmVkIGxpYnJhcmllc1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG4vL2ltcG9ydCB7IEpTRE9NIH0gZnJvbSAnanNkb20nO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tICcuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzJztcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbi8vY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG5cblxuLy8gVGVzdCBzdWl0ZSBmb3IgdGhlIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IGZ1bmN0aW9uXG5kZXNjcmliZSgnZ2VuZXJhdGVVbmlxdWVDb25maWdLZXknLCAoKSA9PiB7XG5cbiAgICAvL2xldCBvcmlnaW5hbFdpbmRvdztcblxuICAgIC8vIGJlZm9yZSgoKSA9PiB7XG4gICAgLy8gICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCB3aW5kb3cgb2JqZWN0XG4gICAgLy8gICAgIG9yaWdpbmFsV2luZG93ID0gZ2xvYmFsVGhpcy53aW5kb3c7XG4gICAgLy9cbiAgICAvLyAgICAgLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAvLyAgICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG4gICAgLy8gICAgIGdsb2JhbFRoaXMud2luZG93ID0gZG9tLndpbmRvdztcbiAgICAvLyB9KTtcblxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KSAgICBcblxuICAgIC8vIC4uLiAoc2FtZSB0ZXN0IGNhc2VzIGFzIGJlZm9yZSlcblxuICAgIGFmdGVyKCgpID0+IHtcbiAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgICAgIC8vIGdsb2JhbFRoaXMud2luZG93ID0gb3JpZ2luYWxXaW5kb3c7XG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXlDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXlQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBjb250YWlucyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgZm9sbG93cyB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUocHJlZml4KTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShjb21wb25lbnROYW1lKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShpZCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLm1hdGNoKC9eW2EtekEtWjAtOV9dKyQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwbGFjZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015JENvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyIzMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXkgUHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgZG9lcyBub3QgY29udGFpbiBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIG9yIHNwYWNlc1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluY2x1ZGUgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdO1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRVcmwgPSB1cmxXaXRob3V0UGFyYW1zLnJlcGxhY2UoL1teXFx3XFxzXS9naSwgJ18nKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoc2FuaXRpemVkVXJsKTtcbiAgICB9KTtcblxuICAgIFxuICAgIFxufSkiLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnRGV0YWlscycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItZGV0YWlscyBpZD1cImRldGFpbHMxXCI+PC9tb25zdGVyLWRldGFpbHM+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydEZXRhaWxzJ107XG5cbiAgICAgICAgICAgICAgICBpZighZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgXG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kZXRhaWxzJyk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnPG1vbnN0ZXItZGV0YWlscyBpZD1cImRldGFpbHMxXCIgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiIGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWw9XCJEZXRhaWxzXCI+PC9tb25zdGVyLWRldGFpbHM+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG4gICAgfSk7XG5cbn0pO1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Zvcm1hdHRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanNcIjtcblxuXG5kZXNjcmliZSgnRm9ybWF0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvNDdcbiAgICBkZXNjcmliZSgnZXhhbXBsZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JmYyBleGFtcGxlIHNob3VsZCBydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7XG5cbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiBcIldvcmxkXCIsXG4gICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdG91cHBlcn0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV09STEQhJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2RvYyBleGFtcGxlIHNob3VsZCBydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7XG5cbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KS5mb3JtYXQoXCIke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IVwiKSkudG8uYmUuZXF1YWwoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3NldCBtYXJrZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnI2EjJywgJyMnLCB1bmRlZmluZWQsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3thfScsICd7JywgJ30nLCAndGVzdCddLFxuICAgICAgICAgICAgWydpMThue2F9JywgJ2kxOG57JywgJ30nLCAndGVzdCddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyB3aXRoIG1hcmtlciAnICsgYiArICcgYW5kICcgKyBjICsgJyBzaG91bGQgcmV0dXJuICAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgIH0pLnNldE1hcmtlcihiLCBjKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZXMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJyR7YSB8IHRvanNvbn0nLCBcIntcXFwiYlxcXCI6e1xcXCJjXFxcIjpcXFwiSGVsbG9cXFwifSxcXFwiZFxcXCI6XFxcIldvcmxkXFxcIixcXFwiZVxcXCI6MX1cIl0sXG4gICAgICAgICAgICBbJ2NsaWNrICR7YS5kfSB0aW1lcycsIFwiY2xpY2sgV29ybGQgdGltZXNcIl0sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAnLCAnIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30nLCAnIEhlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICcsICdIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30nLCAnSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30ke2EuYi5jfScsICdIZWxsb0hlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICR7YS5iLmN9JywgJ0hlbGxvIEhlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICR7YS5iLmN9ICcsICdIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5iLmN9ICcsICcgSGVsbG8gSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAke2EuZH0gJywgJyBIZWxsbyBXb3JsZCAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5iLmMgfCB0b3VwcGVyIHwgbGVuZ3RoIHwgdG9zdHJpbmd9ICcsICcgSGVsbG8gNSAnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiBcIldvcmxkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlOiAxXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTWFya2VyIGluIG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcxJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgbXlrZXkyOiBcIjFcIixcbiAgICAgICAgICAgICAgICBzdWJrZXk6IFwiMlwiXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcihvYmopLmZvcm1hdCh0ZXh0KSkuaXMuZXF1YWwoZXhwZWN0ZWQpXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFBhcmFtZXRlckNoYXJzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3NldFBhcmFtZXRlckNoYXJzKCkgc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHt9KS5zZXRQYXJhbWV0ZXJDaGFycygnYScsICdiJykpLmlzLmluc3RhbmNlb2YoRm9ybWF0dGVyKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCd3aXRoIGNhbGxiYWNrcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYWRkIGNhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7XG4gICAgICAgICAgICAgICAgeDogJzEnXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIG15OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIiFcIiArIHZhbHVlICsgXCIhXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpteX0nKSkuaXMuZXF1YWwoJyExIScpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXk6Om15a2V5PSR7c3Via2V5fX0nO1xuICAgICAgICBsZXQgZXhwZWN0ZWQgPSAnMic7XG5cbiAgICAgICAgaXQoJ2Zvcm1hdCAnICsgdGV4dCArICcgc2hvdWxkICcgKyBleHBlY3RlZCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdleGNlcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthLmIueH0nLCBUeXBlRXJyb3JdLFxuICAgICAgICAgICAgWycke2EuYi5kIHwgdG91cHBlciB8IGxlbmd0aH0nLCBUeXBlRXJyb3JdLFxuICAgICAgICAgICAgWycke2EuYi5kfScsIFR5cGVFcnJvcl0sICAvLyBhLmIuZCByZXR1cm4gdW5kZWZpbmVkIGJ5IHBhdGhmaW5kZXIgXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b2xvd2VyfScsIFR5cGVFcnJvcl0sICAvLyBhLmIuZCByZXR1cm4gdW5kZWZpbmVkIGJ5IHBhdGhmaW5kZXIgXG4gICAgICAgICAgICBbJyR7YSB8IH0nLCBFcnJvcl0sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgdGhyb3cgJyArIHR5cGVvZiBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS50by50aHJvdyhiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cblxuXG4gICAgZGVzY3JpYmUoJ0Zvcm1hdHRlcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBiYXNpYyBzdHJpbmcgd2l0aCBvYmplY3QgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nLCBhZ2U6IDMwfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCdNeSBuYW1lIGlzICR7bmFtZX0gYW5kIEkgYW0gJHthZ2UgfCB0b3N0cmluZ30geWVhcnMgb2xkLicpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnTXkgbmFtZSBpcyBKb2huIGFuZCBJIGFtIDMwIHllYXJzIG9sZC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgd2l0aCBuZXN0ZWQgbWFya2VycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleSR7c3Via2V5fX0nO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge215a2V5MjogJzEnLCBzdWJrZXk6ICcyJ307XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KHRleHQpKS50by5lcXVhbCgnMScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIGN1c3RvbSBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nLCBhZ2U6IDMwfSk7XG4gICAgICAgICAgICBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywgJ10nKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgW25hbWVdIGFuZCBJIGFtIFthZ2UgfCB0b3N0cmluZ10geWVhcnMgb2xkLicpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnTXkgbmFtZSBpcyBKb2huIGFuZCBJIGFtIDMwIHllYXJzIG9sZC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgdXNpbmcgY2FsbGJhY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpLnRvLmVxdWFsKCdcIjFcIicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiAnSGVsbG8nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiAnd29ybGQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihvYmopO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSEnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSB0b28gZGVlcCBuZXN0aW5nIGVycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nfSk7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRUZXh0ID0gJyR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZX19fX19fX19fX19fX19fX19fSc7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChuZXN0ZWRUZXh0KSkudG8udGhyb3coJ3N5bnRheCBlcnJvciBpbiBmb3JtYXR0ZXIgdGVtcGxhdGUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dE9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTogJyR7bXlrZXl9JyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoaW5wdXRPYmopO1xuXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJyR7bXlrZXl9JztcbiAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRUZXh0ID0gdGV4dDtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggMjEgbGV2ZWxzIG9mIG5lc3RpbmdcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjE7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSAnJHsnICsgZm9ybWF0dGVkVGV4dCArICd9JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZvcm1hdHRlci5mb3JtYXQoZm9ybWF0dGVkVGV4dCkpLnRvLnRocm93KCd0b28gZGVlcCBuZXN0aW5nJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQgeyBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24gfTtcblxuLyoqXG4gKiBUaGUgYGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpYCBmdW5jdGlvbiBpcyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICogb2YgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuIEl0IHRha2VzIHRocmVlIGFyZ3VtZW50czpcbiAqXG4gKiAtIGV4cHJlc3Npb24gKHJlcXVpcmVkKTogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByYW5nZSBvZiB2YWx1ZXMgaW4gdGhlIGZvcm1hdCBvZiBzdGFydDEtZW5kMSxzdGFydDItZW5kMix2YWx1ZTMuLi4uXG4gKiAtIHZhbHVlTmFtZSAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRoYXQgaXMgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHJhbmdlIG9mIHZhbHVlcy5cbiAqIC0gb3B0aW9ucyAob3B0aW9uYWwpOiBhbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiAjIyBPcHRpb25zXG4gKiBUaGUgb3B0aW9ucyBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqIHVybEVuY29kZSAoYm9vbGVhbiwgZGVmYXVsdDogZmFsc2UpOiBpZiBzZXQgdG8gdHJ1ZSwgVVJMIGVuY29kZXMgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICogYW5kT3AgKHN0cmluZywgZGVmYXVsdDogJyYmJyk6IHRoZSBsb2dpY2FsIEFORCBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBvck9wIChzdHJpbmcsIGRlZmF1bHQ6ICd8fCcpOiB0aGUgbG9naWNhbCBPUiBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBlcU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc9PScpOiB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICogZ2VPcCAoc3RyaW5nLCBkZWZhdWx0OiAnPj0nKTogdGhlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBsZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc8PScpOiB0aGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBFeGFtcGxlc1xuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGV4cHJlc3Npb24gPSAnMC0xMCwyMC0zMCc7XG4gKiBjb25zdCB2YWx1ZU5hbWUgPSAnYWdlJztcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IHVybEVuY29kZTogdHJ1ZSwgYW5kT3A6ICdhbmQnLCBvck9wOiAnb3InLCBlcU9wOiAnPScsIGdlT3A6ICc+PScsIGxlT3A6ICc8PScgfTtcbiAqIGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwgb3B0aW9ucyk7XG4gKlxuICogY29uc29sZS5sb2coY29tcGFyaXNvbkV4cHJlc3Npb24pOyAvLyBhZ2UlM0UlM0QwJTIwYW5kJTIwYWdlJTNDJTNEMTAlMjBvciUyMGFnZSUzRSUzRDIwJTIwYW5kJTIwYWdlJTNDJTNEMzBcbiAqIGBgYFxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBmb3IgdGhlIGV4cHJlc3Npb24gYW5kIHZhbHVlTmFtZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNwZWNpZmllZCBvcHRpb25zLiBUaGUgcmVzdWx0aW5nIGNvbXBhcmlzb25cbiAqIGV4cHJlc3Npb24gaXMgJ2FnZT49MCBhbmQgYWdlPD0xMCBvciBhZ2U+PTIwIGFuZCBhZ2U8PTMwJywgVVJMIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSB1cmxFbmNvZGUgb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gVGhlIHN0cmluZyBleHByZXNzaW9uIHRvIGdlbmVyYXRlIHRoZSBjb21wYXJpc29uIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51cmxFbmNvZGU9ZmFsc2VdIC0gV2hldGhlciB0byBlbmNvZGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgZm9yIHVzZSBpbiBhIFVSTC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmRPcD0nJiYnXSAtIFRoZSBsb2dpY2FsIEFORCBvcGVyYXRvciB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3JPcD0nfHwnXSAtIFRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lcU9wPSc9PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGVxdWFsaXR5IHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5nZU9wPSc+PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGVPcD0nPD0nXSAtIFRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGZvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdG8gdXNlLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGlucHV0IGlzIGludmFsaWQuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UZXh0XG4gKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbixcblx0dmFsdWVOYW1lLFxuXHRvcHRpb25zID0ge30sXG4pIHtcblx0Y29uc3Qge1xuXHRcdHVybEVuY29kZSA9IGZhbHNlLFxuXHRcdGFuZE9wID0gXCImJlwiLFxuXHRcdG9yT3AgPSBcInx8XCIsXG5cdFx0ZXFPcCA9IFwiPT1cIixcblx0XHRnZU9wID0gXCI+PVwiLFxuXHRcdGxlT3AgPSBcIjw9XCIsXG5cdH0gPSBvcHRpb25zO1xuXHRjb25zdCByYW5nZXMgPSBleHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcblx0bGV0IGNvbXBhcmlzb24gPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHJhbmdlID0gcmFuZ2VzW2ldLnRyaW0oKTtcblx0XHRpZiAocmFuZ2UgPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0fSBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcyhcIi1cIikpIHtcblx0XHRcdGNvbnN0IFtzdGFydCwgZW5kXSA9IHJhbmdlXG5cdFx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdFx0Lm1hcCgocykgPT4gKHMgPT09IFwiXCIgPyBudWxsIDogcGFyc2VGbG9hdChzKSkpO1xuXHRcdFx0aWYgKChzdGFydCAhPT0gbnVsbCAmJiBpc05hTihzdGFydCkpIHx8IChlbmQgIT09IG51bGwgJiYgaXNOYU4oZW5kKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGluIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGlmIChzdGFydCAhPT0gbnVsbCAmJiBlbmQgIT09IG51bGwgJiYgc3RhcnQgPiBlbmQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbXBTdGFydCA9XG5cdFx0XHRcdHN0YXJ0ICE9PSBudWxsXG5cdFx0XHRcdFx0PyBgJHt2YWx1ZU5hbWV9JHt1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoZ2VPcCkgOiBnZU9wfSR7c3RhcnR9YFxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXBFbmQgPVxuXHRcdFx0XHRlbmQgIT09IG51bGxcblx0XHRcdFx0XHQ/IGAke3ZhbHVlTmFtZX0ke3VybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChsZU9wKSA6IGxlT3B9JHtlbmR9YFxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXBSYW5nZSA9IGAke2NvbXBTdGFydH0ke1xuXHRcdFx0XHRjb21wU3RhcnQgJiYgY29tcEVuZCA/IGAgJHthbmRPcH0gYCA6IFwiXCJcblx0XHRcdH0ke2NvbXBFbmR9YDtcblx0XHRcdGNvbXBhcmlzb24gKz0gcmFuZ2VzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcFJhbmdlfSlgIDogY29tcFJhbmdlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocmFuZ2UpO1xuXHRcdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tcFZhbHVlID0gYCR7dmFsdWVOYW1lfSR7XG5cdFx0XHRcdHVybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChlcU9wKSA6IGVxT3Bcblx0XHRcdH0ke3ZhbHVlfWA7XG5cdFx0XHRjb21wYXJpc29uICs9IHJhbmdlcy5sZW5ndGggPiAxID8gYCgke2NvbXBWYWx1ZX0pYCA6IGNvbXBWYWx1ZTtcblx0XHR9XG5cdFx0aWYgKGkgPCByYW5nZXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0Y29tcGFyaXNvbiArPSBgICR7b3JPcH0gYDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBhcmlzb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Z2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9ufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvdXRpbC5tanNcIjtcblxuZGVzY3JpYmUoJ2dlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBzaW5nbGUgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEsMyw1JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4PT0xKSB8fCAoeD09MykgfHwgKHg9PTUpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciByYW5nZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDYtOCc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSAmJiB4PD0zKSB8fCAoeD49NiAmJiB4PD04KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3IgbWl4ZWQgcmFuZ2VzIGFuZCBzaW5nbGUgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1LDctOSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSAmJiB4PD0zKSB8fCAoeD09NSkgfHwgKHg+PTcgJiYgeDw9OSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgcmFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUtNCc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgZXhwZWN0KCgpID0+IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpKS50by50aHJvdyhgSW52YWxpZCByYW5nZSAnNS00J2ApO1xuICAgIH0pO1xuXG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyxhJztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBleHBlY3QoKCkgPT4gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSkpLnRvLnRocm93KCdJbnZhbGlkIHZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIHdpdGggY3VzdG9tIG9wZXJhdG9ycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFuZE9wOiAnQU5EJyxcbiAgICAgICAgICAgIG9yT3A6ICdPUicsXG4gICAgICAgICAgICBlcU9wOiAnPT09JyxcbiAgICAgICAgICAgIGdlT3A6ICc+PScsXG4gICAgICAgICAgICBsZU9wOiAnPD0nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xIEFORCB4PD0zKSBPUiAoeD09PTUpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIHdpdGggdXJsRW5jb2RlIG9wdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdENhc2VzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLDMsNScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeCUzRCUzRDEpIHx8ICh4JTNEJTNEMykgfHwgKHglM0QlM0Q1KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICctMTAnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzQyUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEwLScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNFJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMS0zLDYtOCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneScsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeSUzRSUzRDEgJiYgeSUzQyUzRDMpIHx8ICh5JTNFJTNENiAmJiB5JTNDJTNEOCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMS0zLDUsNy05JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd6JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh6JTNFJTNEMSAmJiB6JTNDJTNEMykgfHwgKHolM0QlM0Q1KSB8fCAoeiUzRSUzRDcgJiYgeiUzQyUzRDkpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGVzdENhc2VzLmZvckVhY2goKHtleHByZXNzaW9uLCB2YWx1ZU5hbWUsIGV4cGVjdGVkfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwge3VybEVuY29kZTogdHJ1ZX0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIG9wZW4tZW5kZWQgcmFuZ2VzIHdpdGggdXJsRW5jb2RlIG9wdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdENhc2VzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxMC0nLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzRSUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJy0xMCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneScsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd5JTNDJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe2V4cHJlc3Npb24sIHZhbHVlTmFtZSwgZXhwZWN0ZWR9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCB7dXJsRW5jb2RlOiB0cnVlfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHsgcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2gsIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaCB9O1xuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIGJyYWNrZXRlZCBrZXktdmFsdWUgcGFpcnMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiAtIFRoZSBzdHJpbmcgc3RhcnRzIHdpdGggYSBoYXNoIHN5bWJvbCAjLlxuICogLSBBZnRlciB0aGUgaGFzaCBzeW1ib2wsIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBzZWxlY3RvciBzdHJpbmdzLCBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24gOy5cbiAqIC0gRWFjaCBzZWxlY3RvciBzdHJpbmcgaGFzIHRoZSBmb3JtYXQgc2VsZWN0b3JOYW1lKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyLC4uLikuXG4gKiAtIFRoZSBzZWxlY3RvciBuYW1lIGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLlxuICogLSBUaGUga2V5LXZhbHVlIHBhaXJzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzICwgYW5kIGFyZSBvZiB0aGUgZm9ybSBrZXk9dmFsdWUuXG4gKiAtIFRoZSBrZXkgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSB2YWx1ZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMuXG4gKiAtIElmIHRoZSB2YWx1ZSBjb250YWlucyBjb21tYXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcyBcIi5cbiAqIC0gVGhlIGVudGlyZSBrZXktdmFsdWUgcGFpciBtdXN0IGJlIFVSTC1lbmNvZGVkLlxuICogLSBUaGUgY2xvc2luZyBwYXJlbnRoZXNpcyApIGZvciBlYWNoIHNlbGVjdG9yIG11c3QgYmUgcHJlc2VudCwgZXZlbiBpZiB0aGVyZSBhcmUgbm8ga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAxOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoa2V5Mz12YWx1ZTMpJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHsgc2VsZWN0b3IxOiB7IGtleTE6IFwidmFsdWUxXCIsIGtleTI6IFwidmFsdWUyXCIgfSwgc2VsZWN0b3IyOiB7IGtleTM6IFwidmFsdWUzXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIEV4YW1wbGUgMjpcbiAqIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKCc7XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAqIC8vIHJlc3VsdCA9PiB7fVxuICogYGBgXG4gKlxuICogQHNpbmNlIDMuMzcuMFxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hTdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHBhcnNlLCBjb250YWluaW5nIGJyYWNrZXRlZCBrZXktdmFsdWUgcGFpcnMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcnNlZCByZXN1bHQsIHdpdGgga2V5cyByZXByZXNlbnRpbmcgdGhlIHNlbGVjdG9ycyBhbmQgdmFsdWVzIHJlcHJlc2VudGluZyB0aGUga2V5LXZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHNlbGVjdG9yLlxuICogICAgICAgICAgICAgICAgICAgIC0gUmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBwYXJzaW5nLiAqL1xuZnVuY3Rpb24gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZykge1xuXHRjb25zdCBzZWxlY3RvcnMgPSB7fTtcblx0Ly9jb25zdCBzZWxlY3RvclN0YWNrID0gW107XG5cdC8vY29uc3Qga2V5VmFsdWVTdGFjayA9IFtdO1xuXG5cdGNvbnN0IHRyaW1tZWRIYXNoU3RyaW5nID0gaGFzaFN0cmluZy50cmltKCk7XG5cdGNvbnN0IGNsZWFuZWRIYXNoU3RyaW5nID1cblx0XHR0cmltbWVkSGFzaFN0cmluZy5jaGFyQXQoMCkgPT09IFwiI1wiXG5cdFx0XHQ/IHRyaW1tZWRIYXNoU3RyaW5nLnNsaWNlKDEpXG5cdFx0XHQ6IHRyaW1tZWRIYXNoU3RyaW5nO1xuXG5cdC8vY29uc3Qgc2VsZWN0b3JzID0gKGtleVZhbHVlU3RhY2subGVuZ3RoID4gMCkgPyByZXN1bHRbc2VsZWN0b3JTdGFja1tzZWxlY3RvclN0YWNrLmxlbmd0aCAtIDFdXSA6IHJlc3VsdDtcblx0bGV0IGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cblx0ZnVuY3Rpb24gYWRkVG9SZXN1bHQoa2V5LCB2YWx1ZSkge1xuXHRcdGlmIChjdXJyZW50U2VsZWN0b3IgJiYga2V5KSB7XG5cdFx0XHRpZiAoIXNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdKSB7XG5cdFx0XHRcdHNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudEtleSA9IFwiXCI7XG5cdGxldCBjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRsZXQgaW5LZXkgPSB0cnVlO1xuXHRsZXQgaW5WYWx1ZSA9IGZhbHNlO1xuXHRsZXQgaW5RdW90ZWRWYWx1ZSA9IGZhbHNlO1xuXHRsZXQgaW5TZWxlY3RvciA9IHRydWU7XG5cdGxldCBlc2NhcGVkID0gZmFsc2U7XG5cdGxldCBxdW90ZWRWYWx1ZVN0YXJ0Q2hhciA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbmVkSGFzaFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGMgPSBjbGVhbmVkSGFzaFN0cmluZ1tpXTtcblx0XHRjb25zdCBuZXh0Q2hhciA9IGNsZWFuZWRIYXNoU3RyaW5nPy5baSArIDFdO1xuXG5cdFx0aWYgKGMgPT09IFwiXFxcXFwiICYmICFlc2NhcGVkKSB7XG5cdFx0XHRlc2NhcGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChlc2NhcGVkKSB7XG5cdFx0XHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5LZXkpIHtcblx0XHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpblZhbHVlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0fVxuXHRcdFx0ZXNjYXBlZCA9IGZhbHNlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluUXVvdGVkVmFsdWUgJiYgcXVvdGVkVmFsdWVTdGFydENoYXIgIT09IGMpIHtcblx0XHRcdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpbktleSkge1xuXHRcdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluVmFsdWUpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIjtcIiAmJiBpblNlbGVjdG9yKSB7XG5cdFx0XHRpblNlbGVjdG9yID0gdHJ1ZTtcblx0XHRcdGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5TZWxlY3RvciA9PT0gdHJ1ZSAmJiBjICE9PSBcIihcIikge1xuXHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCIoXCIgJiYgaW5TZWxlY3Rvcikge1xuXHRcdFx0aW5TZWxlY3RvciA9IGZhbHNlO1xuXHRcdFx0aW5LZXkgPSB0cnVlO1xuXG5cdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpbktleSA9PT0gdHJ1ZSAmJiBjICE9PSBcIj1cIikge1xuXHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiPVwiICYmIGluS2V5KSB7XG5cdFx0XHRpbktleSA9IGZhbHNlO1xuXHRcdFx0aW5WYWx1ZSA9IHRydWU7XG5cblx0XHRcdGlmIChuZXh0Q2hhciA9PT0gJ1wiJyB8fCBuZXh0Q2hhciA9PT0gXCInXCIpIHtcblx0XHRcdFx0aW5RdW90ZWRWYWx1ZSA9IHRydWU7XG5cdFx0XHRcdHF1b3RlZFZhbHVlU3RhcnRDaGFyID0gbmV4dENoYXI7XG5cdFx0XHRcdGkrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5WYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGluUXVvdGVkVmFsdWUpIHtcblx0XHRcdFx0aWYgKGMgPT09IHF1b3RlZFZhbHVlU3RhcnRDaGFyKSB7XG5cdFx0XHRcdFx0aW5RdW90ZWRWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYyA9PT0gXCIsXCIpIHtcblx0XHRcdFx0aW5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbktleSA9IHRydWU7XG5cdFx0XHRcdGNvbnN0IGRlY29kZWRDdXJyZW50VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoY3VycmVudFZhbHVlKTtcblx0XHRcdFx0YWRkVG9SZXN1bHQoY3VycmVudEtleSwgZGVjb2RlZEN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGMgPT09IFwiKVwiKSB7XG5cdFx0XHRcdGluVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0Ly9pbktleSA9IHRydWU7XG5cdFx0XHRcdGluU2VsZWN0b3IgPSB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlY29kZWRDdXJyZW50VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoY3VycmVudFZhbHVlKTtcblx0XHRcdFx0YWRkVG9SZXN1bHQoY3VycmVudEtleSwgZGVjb2RlZEN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBzZWxlY3RvciBzdHJpbmcgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgY29udGFpbmluZyBzZWxlY3RvcnMgYW5kIGtleS12YWx1ZSBwYWlycy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkSGFzaFByZWZpeCAtIFdoZXRoZXIgdG8gYWRkIHRoZSBoYXNoIHByZWZpeCAjIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoYXNoIHNlbGVjdG9yIHN0cmluZy5cbiAqIEBzaW5jZSAzLjM3LjBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKG9iamVjdCwgYWRkSGFzaFByZWZpeCA9IHRydWUpIHtcblx0aWYgKCFvYmplY3QpIHtcblx0XHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiIDogXCJcIjtcblx0fVxuXG5cdGxldCBoYXNoU3RyaW5nID0gXCJcIjtcblxuXHRmdW5jdGlvbiBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBzZWxlY3RvciBpbiBvYmplY3QpIHtcblx0XHRpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KHNlbGVjdG9yKSkge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWVQYWlycyA9IG9iamVjdFtzZWxlY3Rvcl07XG5cdFx0XHRsZXQgc2VsZWN0b3JTdHJpbmcgPSBzZWxlY3Rvcjtcblx0XHRcdGxldCBrZXlWYWx1ZVN0cmluZyA9IFwiXCI7XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGtleVZhbHVlUGFpcnMpIHtcblx0XHRcdFx0aWYgKGtleVZhbHVlUGFpcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0ga2V5VmFsdWVQYWlyc1trZXldO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGtleVZhbHVlU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIixcIjtcblx0XHRcdFx0XHRrZXlWYWx1ZVN0cmluZyArPSBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoa2V5VmFsdWVTdHJpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzZWxlY3RvclN0cmluZyArPSBcIihcIiArIGtleVZhbHVlU3RyaW5nICsgXCIpXCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gaGFzaFN0cmluZy5sZW5ndGggPT09IDAgPyBcIlwiIDogXCI7XCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gc2VsZWN0b3JTdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFkZEhhc2hQcmVmaXggPyBcIiNcIiArIGhhc2hTdHJpbmcgOiBoYXNoU3RyaW5nO1xufVxuIiwgIi8vIHRlc3QuanNcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtcbiAgICBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCxcbiAgICBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2hcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanNcIjtcblxuZGVzY3JpYmUoXCJwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgc3RyaW5nXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGtleS12YWx1ZSBwYWlyXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgbXVsdGlwbGUgc2VsZWN0b3JzIHdpdGggbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyxrZXk0PXZhbHVlNClcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgICAgIGtleTI6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MzogXCJ2YWx1ZTNcIixcbiAgICAgICAgICAgICAgICBrZXk0OiBcInZhbHVlNFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBkZWNvZGUgVVJMLWVuY29kZWQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTElMkN3aXRoJTIwY29tbWEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTEsd2l0aCBjb21tYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNlbGVjdG9yMS5rZXkxKS50by5lcXVhbChleHBlY3RlZFJlc3VsdC5zZWxlY3RvcjEua2V5MSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW5wdXQgd2l0aG91dCBhIGxlYWRpbmcgaGFzaFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCJzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgaW52YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTJcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7fTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGVtcHR5IGlucHV0IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGludmFsaWQgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNpbnZhbGlkJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHNpbXBsZSBpbnB1dCBzdHJpbmcgd2l0aCBvbmUgc2VsZWN0b3IgYW5kIG9uZSBrZXktdmFsdWUgcGFpcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYW4gaW5wdXQgc3RyaW5nIHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSk7c2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3RvcjE6IHtrZXkxOiAndmFsdWUxJ30sIHNlbGVjdG9yMjoge2tleTI6ICd2YWx1ZTInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPSxrZXkyPSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAnJywga2V5MjogJyd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBwZXJjZW50LWVuY29kZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPXZhbHVlJTIwMSxrZXkyPXZhbHVlJTJDMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUgMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRvdWJsZS1xdW90ZWQgdmFsdWVzIHdpdGggY29tbWFzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPVwidmFsdWUsMVwiLGtleTI9XCJ2YWx1ZSwyXCIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJ3ZhbHVlLDEnLCBrZXkyOiAndmFsdWUsMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGhhc2ggc3ltYm9sICgjKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICdzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnICAjc2VsZWN0b3Ioa2V5PXZhbHVlKSAgJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBzdHJpbmcgZW5kcyBwcmVtYXR1cmVseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIGEgc2VsZWN0b3IgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBrZXkgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IoPXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZmEgdmFsdWUgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7XG4gICAgICAgICAgICBzZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBpcyBubyBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWU7JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIHNlbWljb2xvbiBhZnRlciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpc2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdG9yMjoge1xuICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAncmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdXJsLWVuY29kZWQgaGFzaCBzdHJpbmcgZm9yIGEgc2ltcGxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgICAgICcuZXhhbXBsZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogJ3JcImVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yJTIyZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqIG5vZGVqcyBkb2VzbnQgc3VwcG9ydCB3aW5kb3cuY3J5cHQgKi9cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdNYXRoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IHJhbmRvbSA9ICgpID0+IHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvbWF0aC9yYW5kb20ubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICByYW5kb20gPSBtLnJhbmRvbTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yYW5kb20oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYSBncmVhdGVyIGIgc2hvdWxkIHRocm93IGVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oMTAsIDIpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHJhbmRvbSgpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRoYXQuaXMuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKDUsIDYpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHRocm93IEVycm9yIHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgtOTk5OTk5OTk5LCA5OTk5OTk5OTk5OTk5OTk5OTk5OSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCByID0gcmFuZG9tKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgaXQociArICcgc2hvdWxkIHJldHVybiB2YWx1ZSBiZXR3ZWVuICcgKyBhICsgJyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA+PSBhKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA8PSBiKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdW5kcyA9IDUwMFxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHJvdW5kczsgaSA8IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSByYW5kb20oYSwgYik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF2ZyA9IHN1bSAvIHJvdW5kcztcblxuICAgICAgICAgICAgICAgIGl0KGF2ZyArICcgc2hvdWxkIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPiBhKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPCBiKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7dHJpbVNwYWNlc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ3RyaW1TcGFjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgW1xuICAgICAgICAvLyBvbmUgc3Ryb2tlIGlzIGVzY3BlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlXG4gICAgICAgIFsnIHZhbHVlICcsICd2YWx1ZSddLFxuICAgICAgICBbJyB2YWx1ZVxcXFwgJywgJ3ZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXFxcIHZhbHVlXFxcXCAnLCAnXFxcXCB2YWx1ZVxcXFwgJ10sXG4gICAgICAgIFsnXFwgdmFsdWVcXCAnLCAndmFsdWUnXSwgICBcbiAgICAgICAgW1wiICAgdmFsdWUgXFwgXCIsICd2YWx1ZSddLCBcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ3RyaW1TcGFjZXMoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYiksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmltU3BhY2VzKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiAgICAiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1Byb2Nlc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG1hbnkgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNpcmVkRGVsYXkgPSAyMDA7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQoZGVzaXJlZERlbGF5KzEwMCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGRlbGF5IDEyIFxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCAodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sIGRlc2lyZWREZWxheSxmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBkZWxheVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoK25ldyBEYXRlKCkgPiB0ICsgZGVzaXJlZERlbGF5KzEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb25lIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG5vIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKCkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcodHJ1ZSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBQcm9jZXNzaW5nKFwidGVzdFwiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTsiLCAiaW1wb3J0IHtEZWFkTWFuc1N3aXRjaH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEZWFkTWFuc1N3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBtczEgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gIERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gbXMyIC0gbXMxO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ3RvIHNob3J0ICcgKyBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlIGFuZCB0b3VjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlYWRtYW5zc3dpdGNoID0gbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG5cbiAgICAgICAgICAgICAgICBpZiAobXMxID4gbXMyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0aW1pbmcgZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDYwMCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcigndG8gc2hvcnQgJyArIGRpZmYpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyAgIDAgbXM6IGluaXQoKSAtPiB3YWl0IDEwMCBtcyBcbiAgICAgICAgICAgIC8vICA1MCBtczogdG91Y2goKSAtPiB3YWl0IDEwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCAxMDBcbiAgICAgICAgICAgIC8vIDEwMCBtczogdG91Y2goNTAwKSAtPiB3YWl0IDUwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCA1MDBcbiAgICAgICAgICAgIC8vIDYwMCBtczogZXhlY3V0ZSBjYWxsYmFja1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goKVxuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYWRtYW5zc3dpdGNoLnRvdWNoKDUwMClcbiAgICAgICAgICAgICAgICB9LCA1MClcblxuICAgICAgICAgICAgfSwgNTApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgQ29tcGFyYXRvciB9O1xuXG4vKipcbiAqIFRoZSBjb21wYXJhdG9yIGFsbG93cyBhIGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYmUgYWJzdHJhY3RlZC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzIG9mIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgY2xhc3MuXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbig0LCAyKSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA0KSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gYWxzbyBwYXNzIHlvdXIgb3duIGNvbXBhcmlzb24gZnVuY3Rpb24sIGFuZCB0aHVzIGRlZmluZSB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbi5cbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdXRpbC9jb21wYXJhdG9yLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqL1xuY2xhc3MgQ29tcGFyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBjb21wYXJhdG9yXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja30gW2NhbGxiYWNrXSBDb21wYXJhdG9yIGNhbGxiYWNrXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSBpbXByYWN0aWNhbCBjb21wYXJpc29uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHRoaXMuY29tcGFyZSA9IGNhbGxiYWNrO1xuXHRcdH0gZWxzZSBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGRlZmF1bHQgY29tcGFyZSBmdW5jdGlvblxuXG5cdFx0XHQvKipcblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0geyp9IGFcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYlxuXHRcdFx0ICogQHJldHVybiB7aW50ZWdlcn0gLTEsIDAgb3IgMVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0XHRpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImltcHJhY3RpY2FsIGNvbXBhcmlzb25cIiwgXCJ0eXBlcy9jb21wYXJhdG9yLm1qc1wiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGEgPCBiID8gLTEgOiAxO1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogY2hhbmdlcyB0aGUgb3JkZXIgb2YgdGhlIG9wZXJhdG9yc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtDb21wYXJhdG9yfVxuXHQgKi9cblx0cmV2ZXJzZSgpIHtcblx0XHRjb25zdCBvcmlnaW5hbCA9IHRoaXMuY29tcGFyZTtcblx0XHR0aGlzLmNvbXBhcmUgPSAoYSwgYikgPT4gb3JpZ2luYWwoYiwgYSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHR3byB2YXJpYWJsZXMgYXJlIGVxdWFsLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRlcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGdyZWF0ZXIgdGhhbiBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Z3JlYXRlclRoYW4oYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmUoYSwgYikgPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbk9yRXF1YWwoYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmdyZWF0ZXJUaGFuKGEsIGIpIHx8IHRoaXMuZXF1YWwoYSwgYik7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVzc1RoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYSBpcyBsZXNzIHRoYW4gYlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsZXNzVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA8IDA7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIG9wZXJhdG9yXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICogICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICogICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICogICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSk7ICAvLyBcdTIxQTYgdHJ1ZVxuICogYGBgXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuVXRpbH5leGFtcGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAc2VlIE1vbnN0ZXIuVXRpbC5Db21wYXJhdG9yXG4gKi9cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtDb21wYXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanNcIjtcblxuXG5kZXNjcmliZSgnQ29tcGFyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29tcGFyYXRvciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29tcGFyYXRvciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcih0cnVlKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IENvbXBhcmF0b3IoXCJ0ZXN0XCIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWy00LCAtNCwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbChhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2VxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIDVdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIG51bGxdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHBhcnNlSW50KFwiYVwiKV0sXG4gICAgICAgICAgICBbZmFsc2UsIDVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgbnVsbF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IENvbXBhcmF0b3IoKS5lcXVhbChhLCBiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dyZWF0ZXJUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLnJldmVyc2UoKS5ncmVhdGVyVGhhbihhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dyZWF0ZXJUaGFuT3JFcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWy00LCAtNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2xlc3NUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnRhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoMiwgNSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbig0LCAyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDQpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggb3duIGZ1bmN0aW9uIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAgICAgICAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGRlZXBGcmVlemUgfTtcblxuLyoqXG4gKiBEZWVwIGZyZWV6ZSBhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGJlIGZyZWV6ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmplY3QpIHtcblx0dmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgZGVmaW5lZCBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgb2JqZWN0XG5cdGxldCBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG5cdC8vIEZyZWV6ZSBwcm9wZXJ0aWVzIGJlZm9yZSBmcmVlemluZyB5b3Vyc2VsZlxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvYmplY3RbbmFtZV07XG5cblx0XHRvYmplY3RbbmFtZV0gPVxuXHRcdFx0dmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gZGVlcEZyZWV6ZSh2YWx1ZSkgOiB2YWx1ZTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdCk7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGVlcEZyZWV6ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2ZyZWV6ZS5tanNcIjtcblxuXG5kZXNjcmliZSgnZGVlcEZyZWV6ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdkZWVwRnJlZXplIGFuIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGZyZWV6ZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoxXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6MlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLm5vdC5lcWwob2JqMSlcbiAgICAgICAgICAgIG9iajEuYS5iLmMgPSAyO1xuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxKTtcblxuICAgICAgICAgICAgY29uc3Qgb2JqMUZyZWV6ZWQgPSBkZWVwRnJlZXplKG9iajEpO1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajFGcmVlemVkKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZnJlZXplXG4gICAgICAgICAgICAgICAgLy8gbm8gY2hhbmdlIHRvIHRoZSBvYmplY3QsIGV4Y2VwdGlvbiBkZXBlbmRzIG9uIG1vZGUgKHN0cmljdCBFUyAyMDE1LCBldGMpXG4gICAgICAgICAgICAgICAgb2JqMUZyZWV6ZWQuYS5iLmMgPSAzICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtjbG9uZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0Nsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgQSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGIpIHtcbiAgICAgICAgICAgIHRoaXMuYiA9IGJcbiAgICAgICAgfVxuXG4gICAgICAgIGEoKSB7XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjbGFzcyBCIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBnZXRDbG9uZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkRPTkVcIlxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoQikgd2l0aCBnZXRDbG9uZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZShCKSBzaG91bGQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGIgPSBuZXcgQih7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB5OiAxLCBkOiBuZXcgQSgxKSwgejogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgciA9IGNsb25lKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQilcbiAgICAgICAgICAgIGV4cGVjdChyKS5ub3QuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkocikpLmVxdWFsKEpTT04uc3RyaW5naWZ5KCdET05FJykpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJy5jbG9uZShBKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZShBKSBzaG91bGQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBuZXcgQSh7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB5OiAxLCBkOiBuZXcgQSgxKSwgejogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS50by5iZS5pbnN0YW5jZU9mKEEpXG4gICAgICAgICAgICBleHBlY3QoYikubm90LmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGEpKS5lcXVhbChKU09OLnN0cmluZ2lmeShiKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIC8vIG5vZGVqcyBkb2VzIG5vdCBoYXZlIGEgRE9NXG4gICAgaWYgKHR5cGVvZiBEb2N1bWVudEZyYWdtZW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGRlc2NyaWJlKCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnLmNsb25lKERvY3VtZW50RnJhZ21lbnQpIHNob3VsZCBzYW1lIERvY3VtZW50RnJhZ21lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoYikuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnLmNsb25lKG51bGwpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB0eXBlb2YgbnVsbCByZXN1bHRzIGluICdvYmplY3QnLiAgaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuICAgICAgICBpdCgnLmNsb25lKG51bGwpIHNob3VsZCAgbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gbnVsbFxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIGV4cGVjdChiKS50by5iZS5udWxsO1xuICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnLmNsb25lKHVuZGVmaW5lZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcuY2xvbmUodW5kZWZpbmVkKSBzaG91bGQgIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGEgPT09IGIpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChhID09PSB1bmRlZmluZWQpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChiID09PSB1bmRlZmluZWQpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUob2JqZWN0KScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKHt9KSBzaG91bGQgIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0ge31cbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGIgPT09ICdvYmplY3QnKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe3g6MX0pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7eDogMX1cbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYS54KS5pcy5lcXVhbChiLngpXG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJy5jbG9uZShmdW5jdGlvbiknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJy5jbG9uZShmdW5jdGlvbikgc2hvdWxkICBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gKCkgPT4ge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ2Z1bmN0aW9uJykudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnLmNsb25lKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsICd1bmRlZmluZWQnXSxcbiAgICAgICAgICAgIFtudWxsLCAnb2JqZWN0J10sIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgJ2Z1bmN0aW9uJ10sXG4gICAgICAgICAgICBbMiwgJ251bWJlciddLFxuICAgICAgICAgICAgW2ZhbHNlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW3RydWUsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbNC41LCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sICdvYmplY3QnXSwgLy8gYXJyYXkgaXN0IGF1Y2ggdHlwZSBvYmplY3RcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksICdzeW1ib2wnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcuY2xvbmUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkICAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBjID0gY2xvbmUoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBjKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlci5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4uL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgVFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8gfSBmcm9tIFwiLi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBDb25zb2xlSGFuZGxlciB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgY2xhc3Mgc2ltcGx5IGJ5IHVzaW5nIHRoZSBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkxvZ2dpbmcuSGFuZGxlci5Db25zb2xlSGFuZGxlcigpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmcuSGFuZGxlclxuICovXG5jbGFzcyBDb25zb2xlSGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuXHQvKipcblx0ICogVGhpcyBpcyB0aGUgY2VudHJhbCBsb2cgZnVuY3Rpb24uIHRoaXMgbWV0aG9kIG11c3QgYmVcblx0ICogb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBoYW5kbGVycyB3aXRoIHRoZWlyIG93biBsb2dpYy5cblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHtMb2dFbnRyeX0gZW50cnlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRsb2coZW50cnkpIHtcblx0XHRpZiAoc3VwZXIubG9nKGVudHJ5KSkge1xuXHRcdFx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cdFx0XHRpZiAoIWNvbnNvbGUpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKCFjb25zb2xlLmVycm9yKSBjb25zb2xlLmVycm9yID0gY29uc29sZS5sb2c7XG5cdFx0XHRpZiAoIWNvbnNvbGUud2FybikgY29uc29sZS53YXJuID0gY29uc29sZS5sb2c7XG5cblx0XHRcdHN3aXRjaCAoZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0XHRjYXNlIFRSQUNFOlxuXHRcdFx0XHRjYXNlIERFQlVHOlxuXHRcdFx0XHRjYXNlIElORk86XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRkFUQUw6XG5cdFx0XHRcdGNhc2UgRVJST1I6XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBXQVJOOlxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgQUxMLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPLCBPRkYsIFRSQUNFLCBXQVJOIH0gZnJvbSBcIi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBIYW5kbGVyIH07XG5cbi8qKlxuICogVGhlIGxvZyBoYW5kbGVyIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbG9nIGVudHJpZXMgYW5kIHRoZSBsb2cgbGlzdGVuZXJzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jbGFzcyBIYW5kbGVyIGV4dGVuZHMgQmFzZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBMb2dsZXZlbFxuXHRcdCAqXG5cdFx0ICogQHR5cGUge2ludGVnZXJ9XG5cdFx0ICovXG5cdFx0dGhpcy5sb2dsZXZlbCA9IE9GRjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHRoZSBjZW50cmFsIGxvZyBmdW5jdGlvbi4gdGhpcyBtZXRob2QgbXVzdCBiZVxuXHQgKiBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGhhbmRsZXJzIHdpdGggdGhlaXIgb3duIGxvZ2ljLlxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0ge0xvZ0VudHJ5fSBlbnRyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZW50cnksIExvZ0VudHJ5KTtcblxuXHRcdGlmICh0aGlzLmxvZ2xldmVsIDwgZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCBsb2dsZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldExvZ0xldmVsKGxvZ2xldmVsKSB7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxvZ2xldmVsKTtcblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZ2V0IGxvZ2xldmVsXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtpbnRlZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGdldExvZ0xldmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxvZ2xldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqICBTZXQgbG9nIGxldmVsIHRvIEFsbFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRBbGwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChBTEwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gVHJhY2Vcblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0VHJhY2UoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChUUkFDRSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBEZWJ1Z1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXREZWJ1ZygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKERFQlVHKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEluZm9cblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0SW5mbygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKElORk8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gV2FyblxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldFdhcm4oKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChXQVJOKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEVycm9yXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEVycm9yKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoRVJST1IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRmF0YWxcblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RmF0YWwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChGQVRBTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBPZmZcblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0T2ZmKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoT0ZGKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dFbnRyeSB9O1xuXG4vKipcbiAqIEEgbG9nIGVudHJ5IGZvciB0aGUgbG9nZ2VyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNsYXNzIExvZ0VudHJ5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEBwYXJhbSB7Li4uKn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IobG9nbGV2ZWwsIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsb2dsZXZlbCk7XG5cblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0dGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtpbnRlZ2Vycn1cblx0ICovXG5cdGdldExvZ0xldmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxvZ2xldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHthcnJheX1cblx0ICovXG5cdGdldEFyZ3VtZW50cygpIHtcblx0XHRyZXR1cm4gdGhpcy5hcmd1bWVudHM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi4vbG9nZ2luZy9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi4vbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTG9nZ2VyLCBBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkYgfTtcblxuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBBTEwgPSAyNTU7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IFRSQUNFID0gNjQ7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IERFQlVHID0gMzI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IElORk8gPSAxNjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgV0FSTiA9IDg7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IEVSUk9SID0gNDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgRkFUQUwgPSAyO1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBPRkYgPSAwO1xuXG4vKipcbiAqIFRoZSBsb2dnZXIgaXMgYSBjbGFzcyB0aGF0IHRha2VzIGNhcmUgb2YgbG9nZ2luZy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY2xhc3MgTG9nZ2VyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmhhbmRsZXIgPSBuZXcgU2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIYW5kbGVyfSBoYW5kbGVyXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdGFkZEhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5hZGQoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIYW5kbGVyfSBoYW5kbGVyXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdHJlbW92ZUhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5kZWxldGUoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFRyYWNlIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dUcmFjZSguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtUUkFDRSwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBEZWJ1ZyBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRGVidWcoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbREVCVUcsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgSW5mbyBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nSW5mbyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtJTkZPLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFdhcm4gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1dhcm4oLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbV0FSTiwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBFcnJvciBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRXJyb3IoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbRVJST1IsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgRmF0YWwgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0ZhdGFsKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0ZBVEFMLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTGFiZWxzXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbGV2ZWxcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldExhYmVsKGxldmVsKSB7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxldmVsKTtcblxuXHRcdGlmIChsZXZlbCA9PT0gQUxMKSByZXR1cm4gXCJBTExcIjtcblx0XHRpZiAobGV2ZWwgPT09IFRSQUNFKSByZXR1cm4gXCJUUkFDRVwiO1xuXHRcdGlmIChsZXZlbCA9PT0gREVCVUcpIHJldHVybiBcIkRFQlVHXCI7XG5cdFx0aWYgKGxldmVsID09PSBJTkZPKSByZXR1cm4gXCJJTkZPXCI7XG5cdFx0aWYgKGxldmVsID09PSBXQVJOKSByZXR1cm4gXCJXQVJOXCI7XG5cdFx0aWYgKGxldmVsID09PSBFUlJPUikgcmV0dXJuIFwiRVJST1JcIjtcblx0XHRpZiAobGV2ZWwgPT09IEZBVEFMKSByZXR1cm4gXCJGQVRBTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gT0ZGKSByZXR1cm4gXCJPRkZcIjtcblxuXHRcdHJldHVybiBcInVua25vd25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBMZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxcblx0ICogQHJldHVybnMge2ludGVnZXJ9XG5cdCAqL1xuXHRnZXRMZXZlbChsYWJlbCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGxhYmVsKTtcblxuXHRcdGlmIChsYWJlbCA9PT0gXCJBTExcIikgcmV0dXJuIEFMTDtcblx0XHRpZiAobGFiZWwgPT09IFwiVFJBQ0VcIikgcmV0dXJuIFRSQUNFO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJERUJVR1wiKSByZXR1cm4gREVCVUc7XG5cdFx0aWYgKGxhYmVsID09PSBcIklORk9cIikgcmV0dXJuIElORk87XG5cdFx0aWYgKGxhYmVsID09PSBcIldBUk5cIikgcmV0dXJuIFdBUk47XG5cdFx0aWYgKGxhYmVsID09PSBcIkVSUk9SXCIpIHJldHVybiBFUlJPUjtcblx0XHRpZiAobGFiZWwgPT09IFwiRkFUQUxcIikgcmV0dXJuIEZBVEFMO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJPRkZcIikgcmV0dXJuIE9GRjtcblxuXHRcdHJldHVybiAwO1xuXHR9XG59XG5cbi8qKlxuICogTG9nIHRyaWdnZXJuXG4gKlxuICogQHBhcmFtIHtpbnRlZ2VyfSBsb2dsZXZlbFxuICogQHBhcmFtIHsqfSBhcmdzXG4gKiBAcmV0dXJucyB7TG9nZ2VyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckxvZyhsb2dsZXZlbCwgLi4uYXJncykge1xuXHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVyKSB7XG5cdFx0aGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KGxvZ2xldmVsLCBhcmdzKSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Q29uc29sZUhhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5pbXBvcnQge1RSQUNFLCBXQVJOLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKSkudG8uYmUuaW5zdGFuY2VvZihDb25zb2xlSGFuZGxlcilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEZBVEFMLCBbMSwgdHJ1ZSwgJ2ZhdGFsJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFRSQUNFLCBbMSwgdHJ1ZSwgJ3RyYWNlJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFdBUk4sIFsxLCB0cnVlLCAnd2FybiddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShERUJVRywgWzEsIHRydWUsICdkZWJ1ZyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShFUlJPUiwgWzEsIHRydWUsICdlcnJvciddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShJTkZPLCBbMSwgdHJ1ZSwgJ2luZm8nXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nZ2VyLCBPRkYsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dUcmFjZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nVHJhY2UoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRGVidWcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0RlYnVnKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0luZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0luZm8oXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nV2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nV2FybihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dFcnJvcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRXJyb3IoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0ZhdGFsKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExldmVsKGEpKS50by5iZS5lcXVhbHMoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5nZXRMYWJlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ0FMTCcsIEFMTF0sXG4gICAgICAgICAgICBbJ1RSQUNFJywgVFJBQ0VdLFxuICAgICAgICAgICAgWydERUJVRycsIERFQlVHXSxcbiAgICAgICAgICAgIFsnSU5GTycsIElORk9dLFxuICAgICAgICAgICAgWydXQVJOJywgV0FSTl0sXG4gICAgICAgICAgICBbJ0VSUk9SJywgRVJST1JdLFxuICAgICAgICAgICAgWydGQVRBTCcsIEZBVEFMXSxcbiAgICAgICAgICAgIFsnT0ZGJywgT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdChhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5nZXRMYWJlbChiKSkudG8uYmUuZXF1YWxzKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkZ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5pbXBvcnQge0hhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCkuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbQUxMXSwgW1RSQUNFXSwgW0RFQlVHXSwgW0lORk9dLCBbV0FSTl0sIFtFUlJPUl0sIFtGQVRBTF0sIFtPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3RoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzZXQgdmFsdWUgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIubG9nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaGFuZGxlcjtcblxuICAgICAgICBjbGFzcyBUZXN0SGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgbG9nKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIubG9nKGVudHJ5KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBUZXN0SGFuZGxlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5sb2coKSB3aXRoIGxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBUZXN0SGFuZGxlcjtcblxuICAgICAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgICAgICAgVGVzdEhhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxzID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2cobG9nbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cGVyLmxvZyhsb2dsZXZlbCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMrK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgWyAvLyBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuICAgICAgICAgICAgW0FMTCwgNl0sXG4gICAgICAgICAgICBbVFJBQ0UsIDZdLFxuICAgICAgICAgICAgW0RFQlVHLCA1XSxcbiAgICAgICAgICAgIFtJTkZPLCA0XSxcbiAgICAgICAgICAgIFtXQVJOLCAzXSxcbiAgICAgICAgICAgIFtFUlJPUiwgMl0sXG4gICAgICAgICAgICBbRkFUQUwsIDFdLFxuICAgICAgICAgICAgW09GRiwgMF1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMubG9nKCcgKyBhICsgJykgc2hvdWxkIGxvZyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoYSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KFRSQUNFKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KERFQlVHKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KElORk8pKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoV0FSTikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShFUlJPUikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShGQVRBTCkpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhbmRsZXIuY2FsbHMpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChBTEwpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmdldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBiZSAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoT0ZGKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRBbGwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0QWxsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldFRyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRUcmFjZSgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXREZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXREZWJ1ZygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRJbmZvKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEluZm8oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0V2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRXYXJuKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEVycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEVycm9yKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEZhdGFsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEZhdGFsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldE9mZigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRPZmYoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dFbnRyeSgxLCAnYScsICdiJywgJ2MnKSkudG8uaW5zdGFuY2VPZihMb2dFbnRyeSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZy5sb2dsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbG9nO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9nID0gbmV3IExvZ0VudHJ5KDEsIGZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGxvZ2xldmVsIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobG9nLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKDEpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0QXJndW1lbnRzKCkpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFtmYWxzZSwgJ3Rlc3QnLCA5OSwge2E6IHRydWV9XSlcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRzW3N5bV0/LnNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzW3N5bV0/LnNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QoIHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKT0+IHtcbiAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLnNlbmQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5kYXRhUmVjZWl2ZWQoKSkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGRzLnBvbGwoKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QobXNnKS50by5iZS5pbnN0YW5jZU9mKE1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtc2cuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhKS50by5iZS5kZWVwLmVxdWFsKHttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9KVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5mdW5jdGlvbiBpbml0V2ViU29ja2V0KCkge1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnRpdGxlICE9PSAnbm9kZScpIHtcbiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0KFwid3NcIikudGhlbigod3MpID0+IHtcbiAgICAgICAgZ2V0R2xvYmFsKCkuV2ViU29ja2V0ID0gY2xhc3MgZXh0ZW5kcyB3c1snV2ViU29ja2V0J10ge1xuICAgICAgICAgICAgY29uc3RydWN0b3IodXJsLCBwcm90b2NvbHMpIHtcbiAgICAgICAgICAgICAgICBzdXBlcih1cmwsIHByb3RvY29scywge1xuICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2VUaW1lb3V0OiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhQYXlsb2FkOiAxMDI0ICogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn1cblxuZXhwb3J0IHtpbml0V2ViU29ja2V0fSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5cbmRlc2NyaWJlKCdNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ2NvbnN0cnVjdCB3aXRob3V0aCBwYXJhbWV0ZXJzIHNob3VsZCB0aHJvdycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCdzaG91bGQgdGhyb3cnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgfSlcbiAgICBcbiAgICBpdCgnZnJvbSBqc29uIHNob3VsZCAnICwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIFwiaWRcIjogXCIxMjNcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXN0XCI6IFwidGVzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbUpTT04oSlNPTi5zdHJpbmdpZnkoanNvbikpO1xuICAgICAgICBjb25zdCBkYXRhID0gbWVzc2FnZS5nZXREYXRhKCk7XG4gICAgICAgIGV4cGVjdChkYXRhLmlkKS50by5lcXVhbChqc29uLmlkKTtcbiAgICAgICAgZXhwZWN0KGRhdGEudHlwZSkudG8uZXF1YWwoanNvbi50eXBlKTtcbiAgICAgICAgZXhwZWN0KGRhdGEuZGF0YSkudG8uZGVlcC5lcXVhbChqc29uLmRhdGEpO1xuICAgICAgICBkb25lKCk7XG4gICAgfSlcbiAgICBcbiAgICBpdCAoXCJ0byBqc29uIHNob3VsZFwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBcImlkXCI6IFwiMTIzXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgICAgIFwidGVzdFwiOiBcInRlc3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZShvYmopO1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZSk7XG4gICAgICAgIGV4cGVjdChkYXRhKS50by5lcXVhbCgne1wiaWRcIjpcIjEyM1wiLFwidHlwZVwiOlwidGVzdFwiLFwiZGF0YVwiOntcInRlc3RcIjpcInRlc3RcIn19Jyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9KVxuXG5cblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb24gfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvYmplY3QgY29udGFpbnMgYSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlclxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy92ZXJzaW9uLTEubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgVGhlIHZlcnNpb24gb2JqZWN0IGNvbnRhaW5zIGEgc2VtYXRpYyB2ZXJzaW9uIG51bWJlclxuICovXG5jbGFzcyBWZXJzaW9uIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbWFqb3Jcblx0ICogQHBhcmFtIG1pbm9yXG5cdCAqIEBwYXJhbSBwYXRjaFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFqb3IgaXMgbm90IGEgbnVtYmVyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaW5vciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHBhdGNoIGlzIG5vdCBhIG51bWJlclxuXHQgKi9cblx0Y29uc3RydWN0b3IobWFqb3IsIG1pbm9yLCBwYXRjaCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHR0eXBlb2YgbWFqb3IgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdG1pbm9yID09PSB1bmRlZmluZWQgJiZcblx0XHRcdHBhdGNoID09PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gbWFqb3IudG9TdHJpbmcoKS5zcGxpdChcIi5cIik7XG5cdFx0XHRtYWpvciA9IHBhcnNlSW50KHBhcnRzWzBdIHx8IDApO1xuXHRcdFx0bWlub3IgPSBwYXJzZUludChwYXJ0c1sxXSB8fCAwKTtcblx0XHRcdHBhdGNoID0gcGFyc2VJbnQocGFydHNbMl0gfHwgMCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1ham9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1ham9yIHZlcnNpb24gaXMgdW5kZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChtaW5vciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtaW5vciA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKHBhdGNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhdGNoID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLm1ham9yID0gcGFyc2VJbnQobWFqb3IpO1xuXHRcdHRoaXMubWlub3IgPSBwYXJzZUludChtaW5vcik7XG5cdFx0dGhpcy5wYXRjaCA9IHBhcnNlSW50KHBhdGNoKTtcblxuXHRcdGlmIChpc05hTih0aGlzLm1ham9yKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc05hTih0aGlzLm1pbm9yKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlub3IgaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc05hTih0aGlzLnBhdGNoKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGF0Y2ggaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3ZlcnNpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgMCBpZiBlcXVhbCwgLTEgaWYgdGhlIG9iamVjdCB2ZXJzaW9uIGlzIGxlc3MgYW5kIDEgaWYgZ3JlYXRlclxuXHQgKiB0aGFuIHRoZSBjb21wYXJlZCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFZlcnNpb259IHZlcnNpb24gVmVyc2lvbiB0byBjb21wYXJlXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdCAqL1xuXHRjb21wYXJlVG8odmVyc2lvbikge1xuXHRcdGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgVmVyc2lvbikge1xuXHRcdFx0dmVyc2lvbiA9IHZlcnNpb24udG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHZlcnNpb24gIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXhjZXB0aW9uXCIpO1xuXHRcdH1cblxuXHRcdGlmICh2ZXJzaW9uID09PSB0aGlzLnRvU3RyaW5nKCkpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IGEgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF07XG5cdFx0Y29uc3QgYiA9IHZlcnNpb24uc3BsaXQoXCIuXCIpO1xuXHRcdGNvbnN0IGxlbiA9IE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChhW2ldICYmICFiW2ldICYmIHBhcnNlSW50KGFbaV0pID4gMCkgfHxcblx0XHRcdFx0cGFyc2VJbnQoYVtpXSkgPiBwYXJzZUludChiW2ldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KGJbaV0gJiYgIWFbaV0gJiYgcGFyc2VJbnQoYltpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA8IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAwO1xuXHR9XG59XG5cbmxldCBtb25zdGVyVmVyc2lvbjtcblxuLyoqXG4gKiBWZXJzaW9uIG9mIG1vbnN0ZXJcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdmVyc2lvbi0yLm1qc1xuICogQHJldHVybnMge01vbnN0ZXIuVHlwZXMuVmVyc2lvbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyXG4gKi9cbmZ1bmN0aW9uIGdldE1vbnN0ZXJWZXJzaW9uKCkge1xuXHRpZiAobW9uc3RlclZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xuXHR9XG5cblx0LyoqIGRvbid0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cblx0bW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuNjAuMFwiKTtcblxuXHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb259IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIjtcblxuZGVzY3JpYmUoJ01vbnN0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmdldE1vbnN0ZXJWZXJzaW9uKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtb25zdGVyVmVyc2lvblxuXG4gICAgICAgIC8qKiBkb25cdTAwQjR0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cbiAgICAgICAgbW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuNjAuMFwiKVxuXG4gICAgICAgIGxldCBtID0gZ2V0TW9uc3RlclZlcnNpb24oKTtcblxuICAgICAgICBpdCgnc2hvdWxkICcgKyBtb25zdGVyVmVyc2lvbiArICcgaXMgJyArIG0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtLmNvbXBhcmVUbyhtb25zdGVyVmVyc2lvbikpLmlzLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgY29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEkgfTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQHNpbmNlIDMuMzQuMFxuICogQHR5cGUge251bWJlcnxmdW5jdGlvbn1cbiAqL1xubGV0IENVUlJFTlRfREVWSUNFX0RQSSA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IGkgPSAwO1xuXHRmb3IgKGkgPSA1NjsgaSA8IDIwMDA7IGkrKykge1xuXHRcdGlmIChnZXRXaW5kb3coKS5tYXRjaE1lZGlhKGAobWF4LXJlc29sdXRpb246ICR7aX1kcGkpYCkubWF0Y2hlcyA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERldmljZURQSSgpIHtcblx0Ly8gb25seSBjYWxsIHRoZSBmdW5jdGlvbiBvbmNlXG5cdGlmICh0eXBlb2YgQ1VSUkVOVF9ERVZJQ0VfRFBJID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRDVVJSRU5UX0RFVklDRV9EUEkgPSBDVVJSRU5UX0RFVklDRV9EUEkoKTtcblx0fVxuXG5cdHJldHVybiBnZXRXaW5kb3coKS5kZXZpY2VQaXhlbFJhdGlvICogQ1VSUkVOVF9ERVZJQ0VfRFBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ1NTIHZhbHVlIHRvIHBpeGVscy5cbiAqXG4gKiBBcyBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFlbScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcmVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCByb290IGZvbnQgc2l6ZSBpbiBwaXhlbHNcbiAqIGNvbnZlcnRUb1BpeGVscygnMXB4JykgLy8gcmV0dXJucyAxXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzEwMCUnKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBpbiBwaXhlbHNcbiAqIGBgYFxuICpcbiAqIEZvbGxvd2luZyB1bml0cyBhcmUgc3VwcG9ydGVkOlxuICogLSBweFxuICogLSBlbVxuICogLSByZW1cbiAqIC0gJVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3BhcmVudEVsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2ZvbnRTaXplRWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IFVuc3VwcG9ydGVkIHVuaXRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgdmFsdWUgZm9ybWF0XG4gKi9cblxuZnVuY3Rpb24gY29udmVydFRvUGl4ZWxzKFxuXHR2YWx1ZSxcblx0cGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0Zm9udFNpemVFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCByZWdleCA9IC9eKC0/W1xcZC5dKykoLiopJC87XG5cdGNvbnN0IG1hdGNoUmVzdWx0ID0gdmFsdWUubWF0Y2gocmVnZXgpO1xuXG5cdGlmICghbWF0Y2hSZXN1bHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9ybWF0OiAke3ZhbHVlfWApO1xuXHR9XG5cblx0Y29uc3QgWywgbnVtLCB1bml0XSA9IG1hdGNoUmVzdWx0O1xuXHRjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KG51bSk7XG5cdGNvbnN0IGRwaSA9IGdldERldmljZURQSSgpO1xuXG5cdGlmICh1bml0ID09PSBcInB4XCIpIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiZW1cIikge1xuXHRcdGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGZvbnRTaXplRWxlbWVudCkuZm9udFNpemUsXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVtYmVyICogZm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJyZW1cIikge1xuXHRcdGNvbnN0IHJvb3RGb250U2l6ZSA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiByb290Rm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCIlXCIpIHtcblx0XHRjb25zdCBwYXJlbnRXaWR0aCA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS53aWR0aCxcblx0XHQpO1xuXHRcdHJldHVybiAobnVtYmVyICogcGFyZW50V2lkdGgpIC8gMTAwO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiaW5cIikge1xuXHRcdHJldHVybiBudW1iZXIgKiBkcGk7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJjbVwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gMi41NDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIm1tXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyNS40O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicHRcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDcyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicGNcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDY7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB1bml0OiAke3VuaXR9YCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzXCI7XG5pbXBvcnQge2dldFdpbmRvd30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc0Jyb3dzZXIsIEpTRE9NRXhwb3J0IGFzIEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZGV0ZWN0UnVudGltZUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanNcIjtcblxuXG5mdW5jdGlvbiBnZXRNb2NrV2luZG93KGRwaSkge1xuXG4gICAgaWYoZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkgPT09ICdicm93c2VyJykge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93KCk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgnJywge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VzOiAndXNhYmxlJyxcbiAgICB9KTtcblxuICAgIGRvbS53aW5kb3cubWF0Y2hNZWRpYSA9IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBkcGlSZWdleCA9IC9cXChtYXgtcmVzb2x1dGlvbjogKFxcZCspZHBpXFwpLztcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBxdWVyeS5tYXRjaChkcGlSZWdleCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEcGkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBkcGkgPD0gbWF4RHBpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2V9O1xuICAgIH07XG5cbiAgICByZXR1cm4gZG9tLndpbmRvdztcbn1cblxuZGVzY3JpYmUoJ2RpbWVuc2lvbicsICgpID0+IHtcbiAgICBsZXQgY3VycmVudEVudmlyb25tZW50O1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy9jaGFpRG9tKGdldERvY3VtZW50KCkpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb252ZXJ0VG9QaXhlbHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcHggdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcxMDBweCcpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMTAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGFuIGludmFsaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZSA9IFwiaW52YWxpZF92YWx1ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCBlcnJvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVscyhpbnZhbGlkVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KGVycm9yRm4pLnRvLnRocm93KEVycm9yLCBgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7aW52YWxpZFZhbHVlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gXCItMTBweFwiO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSAtMTA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscyhuZWdhdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJlbScsIHRlc3RFbGVtZW50LCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHJlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJyZW0nLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcGVyY2VudGFnZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUud2lkdGggPSAnNTAwcHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnNTAlJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMjUwKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHVuc3VwcG9ydGVkIHVuaXRzJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1BpeGVscygnMTB1bnN1cHBvcnRlZFVuaXQnKSkudG8udGhyb3coJ1Vuc3VwcG9ydGVkIHVuaXQ6IHVuc3VwcG9ydGVkVW5pdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldERldmljZURQSScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIERQSScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpKS50by5lcXVhbCh0ZXN0RHBpICogdGVzdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWNoZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTEgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTIgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkxKS50by5lcXVhbChkZXZpY2VEcGkyKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0FXU19MQU1CREEgPSBcImF3cy1sYW1iZGFcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0dPT0dMRV9GVU5DVElPTlMgPSBcImdvb2dsZS1mdW5jdGlvbnNcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0VMRUNUUk9OID0gXCJlbGVjdHJvblwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfTk9ERSA9IFwibm9kZVwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfQlJPV1NFUiA9IFwiYnJvd3NlclwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfV0VCX1dPUktFUiA9IFwid2ViLXdvcmtlclwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfREVOTyA9IFwiZGVub1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfVU5LTk9XTiA9IFwidW5rbm93blwiO1xuXG4vKipcbiAqIERldGVjdHMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiAtICdhd3MtbGFtYmRhJzogQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuICogLSAnZ29vZ2xlLWZ1bmN0aW9ucyc6IEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcbiAqIC0gJ2VsZWN0cm9uJzogRWxlY3Ryb24gZW52aXJvbm1lbnRcbiAqIC0gJ25vZGUnOiBOb2RlLmpzIGVudmlyb25tZW50XG4gKiAtICdicm93c2VyJzogQnJvd3NlciBlbnZpcm9ubWVudFxuICogLSAnd2ViLXdvcmtlcic6IFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcbiAqIC0gJ2Rlbm8nOiBEZW5vIGVudmlyb25tZW50XG4gKiAtICdyZWFjdC1uYXRpdmUnOiBSZWFjdCBOYXRpdmUgZW52aXJvbm1lbnRcbiAqIC0gJ3Vua25vd24nOiBVbmtub3duIGVudmlyb25tZW50XG4gKlxuICogQHNpbmNlIDMuMzQuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGRldGVjdGVkIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gKi9cbmZ1bmN0aW9uIGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCgpIHtcblx0Ly8gQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLmVudiAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfQVdTX0xBTUJEQTtcblx0fVxuXG5cdC8vIEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkZVTkNUSU9OX05BTUVcblx0KSB7XG5cdFx0cmV0dXJuIEVOVl9HT09HTEVfRlVOQ1RJT05TO1xuXHR9XG5cblx0Ly8gTm9kZS5qcyBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT0gbnVsbFxuXHQpIHtcblx0XHQvLyBFbGVjdHJvbiBlbnZpcm9ubWVudFxuXHRcdGlmIChwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBFTlZfRUxFQ1RST047XG5cdFx0fVxuXHRcdHJldHVybiBFTlZfTk9ERTtcblx0fVxuXG5cdC8vIEJyb3dzZXIgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09PSBcInN0cmluZ1wiXG5cdCkge1xuXHRcdC8vIFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcblx0XHRpZiAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuIEVOVl9XRUJfV09SS0VSO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX0JST1dTRVI7XG5cdH1cblxuXHQvLyBEZW5vIGVudmlyb25tZW50XG5cdGlmICh0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBFTlZfREVOTztcblx0fVxuXG5cdC8vIFVua25vd24gZW52aXJvbm1lbnRcblx0cmV0dXJuIEVOVl9VTktOT1dOO1xufVxuXG5leHBvcnQge1xuXHRFTlZfQVdTX0xBTUJEQSxcblx0RU5WX0dPT0dMRV9GVU5DVElPTlMsXG5cdEVOVl9FTEVDVFJPTixcblx0RU5WX05PREUsXG5cdEVOVl9CUk9XU0VSLFxuXHRFTlZfV0VCX1dPUktFUixcblx0RU5WX0RFTk8sXG5cdEVOVl9VTktOT1dOLFxuXHRkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQsXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTdHlsZXNoZWV0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuXG5gO1xuXG5cbmRlc2NyaWJlKCdTdHlsZXNoZWV0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSh7XG4gICAgICAgICAgICBydW5TY3JpcHRzOiBcImRhbmdlcm91c2x5XCIsXG4gICAgICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1N0eWxlc2hlZXQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZXNoZWV0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIFN0eWxlc2hlZXQnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdTdHlsZXNoZWV0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHN0eWxlc2hlZXQsIHVybCA9ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL2VtcHR5LmNzcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBTdHlsZXNoZWV0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cblxubGV0IGFkZGVkTm9kZXMsIG11dGF0aW9ub2JzZXJ2ZXI7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgICBhZGRlZE5vZGVzID0gW107XG4gICAgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24ucmVtb3ZlZE5vZGVzKSB7XG5cbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2Rlcy5wdXNoKG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpIHtcblxuICAgIGlmIChtdXRhdGlvbm9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdCgpXG4gICAgfVxuXG4gICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwge2NoaWxkTGlzdDogdHJ1ZX0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKSB7XG4gICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBmb3IgKGNvbnN0IG4gb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBuLnJlbW92ZSgpO1xuICAgIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xpbmt9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmRlc2NyaWJlKCdMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGluaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBMaW5rJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdsaW5rJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGxpbmssIHVybCA9ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL2VtcHR5LmNzcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIExpbmsgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1NjcmlwdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1NjcmlwdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2NyaXB0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIEpTJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnc2NyaXB0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgc2NyaXB0LCB1cmwgPSAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy9lbXB0eS5qcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHNjcmlwdCA9IG5ldyBTY3JpcHQoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICAgICAgICBkZWZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbm9tb2R1bGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5vbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBzY3JpcHQgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cywgbXV0YXRpb25vYnNlcnZlciwgYWRkZWROb2RlcyA9IFtdO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGF0YSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIERhdGEnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdkYXRhJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgZGF0YSwgdXJsID0gJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvZW1wdHkuanM/JyArIGlkO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2RhdGEgaXMgbm90IGNvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjb25uZWN0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHknLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMScpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDEnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucGFyZW50RWxlbWVudDtcblxuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDInKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMicpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMycpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAzJykudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgNCcpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDQnKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQ7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgbGV0IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXM7XG5cbiAgICBiZWZvcmUoIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyA9IG1bJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnXTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG9wdGlvbnMgPSB7dXJsOiBcIlwiLCBrZXk6IHtzdWJrZXk6IFwiXCIsIGNhc2VTZW5zaXRpdmU6IHRydWV9fTtcbiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIG9wdGlvbnMgd2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJ3Rlc3QnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCd0ZXN0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgb3B0aW9ucyB3aXRob3V0IG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBhdHRyaWJ1dGVzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zb21lLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aCBpbnZhbGlkIG9wdGlvbiBwYXRocycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tbm9uZXhpc3RlbnQnLCAndmFsdWUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgc2luZ2xlIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgbmVzdGVkIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbChcIjI0NlwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbXVsdGlwbGUgbWFwcGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbScsXG4gICAgICAgICAgICAna2V5LnN1YmtleSc6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSAqIDJcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIG5vbi1leGlzdGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ25vbmV4aXN0ZW50JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIG9ubHkgdG8gc3BlY2lmaWVkIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgaWYgbm90IGEgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyB3aXRoIGN1c3RvbSBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbS1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZywgJ2RhdGEtY3VzdG9tLW9wdGlvbi0nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgd2l0aCBpbmNvcnJlY3QgY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBjYXNlIHNlbnNpdGl2ZSBtYXBwaW5nJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktY2FzZVNlbnNpdGl2ZScsICdmYWxzZScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LmNhc2VTZW5zaXRpdmUpLnRvLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtleHRyYWN0S2V5c30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2V4dHJhY3RLZXlzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1zdHJlZXQnLCAnYWRkcmVzcy5zdHJlZXQnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1jaXR5JywgJ2FkZHJlc3MuY2l0eSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmopO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY3VzdG9tIGtleSBhbmQgdmFsdWUgc2VwYXJhdG9ycycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsncHJlZml4K2ZpcnN0bmFtZScsICdwcmVmaXgrZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ3ByZWZpeCtsYXN0bmFtZScsICdwcmVmaXgrbGFzdE5hbWUnXSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqLCAncHJlZml4JywgJysnLCAnKycpO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoZWNrIGlmIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICdEb2UnLFxuICAgICAgICAgICAgYWRkcmVzczogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydmaXJzdG5hbWUnLCAnZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2xhc3RuYW1lJywgJ2xhc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2FkZHJlc3MnLCAnYWRkcmVzcyddLFxuICAgICAgICAgICAgXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgbW9yZSB0ZXN0IGNhc2VzIGFzIG5lZWRlZFxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRmFjdG9yeSB9O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgd29ya2VyIGluc3RhbmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uV29ya2VyXG4gKiBAc3VtbWFyeSBBIHNtYWxsIGZhY3RvcnkgdG8gY3JlYXRlIHdvcmtlclxuICovXG5jbGFzcyBGYWN0b3J5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHdvcmtlcjogbmV3IFdlYWtNYXAoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIFVSTFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKi9cblx0Y3JlYXRlRnJvbVVSTCA9IGZ1bmN0aW9uICh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhciB3b3JrZXIgPSBuZXcgd29ya2VyQ2xhc3ModmFsaWRhdGVTdHJpbmcodXJsKSk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihtZXNzYWdlSGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oZXJyb3JIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG5cdCAqL1xuXHRjcmVhdGVGcm9tU2NyaXB0ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRjb25zdCBibG9iRnVuY3Rpb24gPSBuZXcgZ2V0R2xvYmFsRnVuY3Rpb24oXCJCbG9iXCIpO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgYmxvYkZ1bmN0aW9uKFt2YWxpZGF0ZVN0cmluZyhjb250ZW50KV0sIHtcblx0XHRcdHR5cGU6IFwic2NyaXB0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHVybCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiVVJMXCIpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZUZyb21VUkwodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLnNldCh3b3JrZXIsIHVybCk7XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgY2FsbCByZXZva2VPYmplY3RVUkwgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0gd29ya2VyXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLldvcmtlci5GYWN0b3J5fVxuXHQgKi9cblx0dGVybWluYXRlKHdvcmtlcikge1xuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh3b3JrZXIsIHdvcmtlckNsYXNzKTtcblxuXHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5oYXMod29ya2VyKSkge1xuXHRcdFx0Y29uc3QgdXJsID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uZ2V0KHdvcmtlcik7XG5cdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3dvcmtlci9mYWN0b3J5Lm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzTm9kZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5kZXNjcmliZSgnV29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsWydVUkwnXSwgJ2NyZWF0ZU9iamVjdFVSTCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIvZXhhbXBsZS5tanNcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGdsb2JhbFsnV29ya2VyJ10gPSBjbGFzcyB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbmVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbm1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGEgPSB0eXBlb2YgZ2xvYmFsWydXb3JrZXInXTtcbiAgICAgICAgICAgIGxldCBhMSA9IHR5cGVvZiBXb3JrZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzZG9tID0gaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0ZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSB3b3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gZmFjdG9yeS5jcmVhdGVGcm9tU2NyaXB0KCdjb25zb2xlLmxvZyhcImhlbGxvIHdvcmxkXCIpOycpXG4gICAgICAgICAgICBleHBlY3Qod29ya2VyKS5pcy5pbnN0YW5jZW9mKFdvcmtlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5LnRlcm1pbmF0ZSh3b3JrZXIpKS5pcy5pbnN0YW5jZW9mKEZhY3RvcnkpXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1Byb3h5T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8dGVtcGxhdGUgaWQ9XCJjdXJyZW50XCI+XG4gICAgICAgIDxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudCB8IHRvanNvblwiPjwvbGk+XG4gICAgPC90ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPHVsIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJjdXJyZW50IHBhdGg6YS5iXCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYiB8IGRvaXRcIj5cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwidGVzdDNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuY1wiIGlkPVwiaW5wdXQxXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0XCIgdHlwZT1cInRleHRcIiBuYW1lPVwidGV4dFwiIGlkPVwidGV4dFwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEucmFkaW9cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5zZWxlY3RcIiBuYW1lPVwic2VsZWN0XCIgaWQ9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWVcIj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEubXVsdGlzZWxlY3RcIiBuYW1lPVwibXVsdGlzZWxlY3RcIiBtdWx0aXBsZSBpZD1cIm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWU1XCI+dmFsdWU1PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9XCJ0ZXh0YXJlYVwiIGlkPVwidGV4dGFyZWFcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0YXJlYVwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDMgPSBgXG5cbiAgICA8dGVtcGxhdGUgaWQ9XCJteWlubmVyaWRcIj5cbiAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm15aW5uZXJpZCB8IHRvanNvblwiPjwvc3Bhbj5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpZFwiPlxuICAgICAgICA8cCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpbm5lcmlkIHBhdGg6YS5iXCI+PC9wPlxuICAgIDwvdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDQgPSBgXG4gICAgPGRpdj5cbiAgICAgICAgPGZvcm0gaWQ9XCJmb3JtMVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiY2hlY2tlZFwiIG5hbWU9XCJjaGVja2JveFwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzdGF0ZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyMVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnJhZGlvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIiBkYXRhLWNvbW1lbnQ9XCJub3QgY2FsbGVkIGJlY2F1c2Ugbm8gYmluZCBhdHRyaWJ1dGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgbmFtZT1cImJ1dHRvblwiPlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QxXCIgaWQ9XCJzZWxlY3QxXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QyXCIgbXVsdGlwbGUgaWQ9XCJzZWxlY3QyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnRleHRhcmVhXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgPC90ZXh0YXJlYT5cblxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG5cbmA7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IFVwZGF0ZXIgPSBudWxsO1xuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB9XG4gICAgICAgIGluaXRKU0RPTShvcHRpb25zKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVXBkYXRlciA9IG0uVXBkYXRlcjtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgndGVzdCBHZXR0ZXIgJiYgU2V0dGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3NldEV2ZW50VHlwZXMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLnNldEV2ZW50VHlwZXMoWyd0b3VjaCddKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpdCgnZ2V0U3ViamVjdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHthOiAxfTtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCwgc3ViamVjdCkuZ2V0U3ViamVjdCgpLmEpLnRvLmJlLmVxdWFsKDEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgY29udHJvbCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2VuYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgRXJyb3JzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoZWxlbWVudCwgbnVsbCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCB1ID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdS5ydW4oKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbmV2ZXIgY2FsbGVkIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUpLmlzLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUgKyBcIlwiKS50by5iZS5lcXVhbCgnRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ25ldyBVcGRhdGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnUmVwZWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIDYgbGkgZWxlbWVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzEnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcyJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzQnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc1J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLicgKyBpICsgJyB8IHRvanNvblwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwiY3VycmVudC0nICsgaSArICdcIj57XCJpXCI6XCInICsgaSArICdcIn08L2xpPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWw0O1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdFdmVudGhhbmRsaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlciwgZm9ybTEsIHByb3h5b2JzZXJ2ZXI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pXG4gICAgICAgICAgICAgICAgdXBkYXRlciA9IG5ldyBVcGRhdGVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpLCBwcm94eW9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICBmb3JtMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyBoZXJlIGNsaWNrIGV2ZW50cyBhcmUgdGhyb3duIG9uIHRoZSBjaGVja2JveCBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIHZhbHVlIGlzIG9ic2VydmVkIHZpYSB0aGUgcHJveHlvYnNlcnZlci5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGNoZWNrYm94IGNsaWNrIGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydjaGVja2VkJywgdW5kZWZpbmVkLCAnY2hlY2tlZCddO1xuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U3ViamVjdCgpWydzdGF0ZSddICE9PSBlKSBkb25lKG5ldyBFcnJvcih0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSByYWRpbyBjbGljayBldmVudHMgMScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydyMScsICdyMicsICdyMSddO1xuICAgICAgICAgICAgICAgIGxldCBjbGlja1RhcmdldHMgPSBbJ3IyJywgJ3IxJ11cbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsncmFkaW8nXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IGUpIGRvbmUobmV3IEVycm9yKHYgKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGlja1RhcmdldHMuc2hpZnQoKSkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgIC8vIG5vIGhhbmRsZXIgLy8gYmluZFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncngnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZWxlY3QgY2xpY2sgZXZlbnRzIDInLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0MScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndmFsdWUyJywgJ3ZhbHVlMScsICd2YWx1ZTInXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsnc2VsZWN0J107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID09PSAxID8gMCA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSB0ZXh0YXJlYSBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndGVzdFgnLCAnbG9yZW0gaXBzdW0nLCAnJ107XG4gICAgICAgICAgICAgICAgbGV0IHRlc3RWYWx1ZXMgPSBbXCJsb3JlbSBpcHN1bVwiLCBcIlwiXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsndGV4dGFyZWEnXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gdGVzdFZhbHVlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBhbmQgc2ltdWxhdGUgY2xpY2sgZXZlbnQgZm9yIGJ1YmJsZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQudmFsdWUgPSBcInRlc3RYXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBzZWxlY3QgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDInKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJ10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUyJywgJ3ZhbHVlMycsICd2YWx1ZTQnXSxcbiAgICAgICAgICAgICAgICAgICAgWyd2YWx1ZTEnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXN0U2VsZWN0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgICAgICAgICAgW3RydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ211bHRpc2VsZWN0J107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0ZXN0U2VsZWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHZbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzFdLnNlbGVjdGVkID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSB2WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IHZbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzNdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCBsb3dlciBoZWxsbyBhbmQgSEVMTE95ZXMhJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiSEFMTE9cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ1JlcGxhY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpZC0wXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLjAgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aW5uZXJpZC0wXCI+e1wiaVwiOlwiMFwifTwvc3Bhbj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBhdHRyaWJ1dGVzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MycpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0JylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFkaW8nKVxuICAgICAgICAgICAgICAgIGV4cGVjdChyYWRpby5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVja2JveCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoMCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXVsdGlzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChtdWx0aXNlbGVjdC5zZWxlY3RlZEluZGV4KS50by5iZS5lcXVhbCgtMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBcImRpdi1jbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW86IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogWyd2YWx1ZTMnLCAndmFsdWU0JywgJ290aGVyLXZhbHVlNSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogXCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDphLmJcIiBjbGFzcz1cImRpdi1jbGFzc1wiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiIHZhbHVlPVwiaGVsbG9cIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIiB2YWx1ZT1cInRlc3RcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIiBjaGVja2VkPVwidHJ1ZVwiPicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSwgJ3RleHQgY29udHJvbCcpLnRvLmJlLmVxdWFsKGQuZ2V0U3ViamVjdCgpWydhJ11bJ2MnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCwgJ3JhZGlvIGNvbnRyb2wnKS50by5iZS5lcXVhbCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSwgJ3RleHRhcmVhIGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWyd0ZXh0YXJlYSddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCwgJ3NlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoMSk7IC8vIFswPT5vdGhlci12YWx1ZSwgMT0+dmFsdWUyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKG11bHRpc2VsZWN0LnNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucy5wdXNoKG9iai52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zKSwgJ211bHRpc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbChKU09OLnN0cmluZ2lmeShkLmdldFN1YmplY3QoKVsnYSddWydtdWx0aXNlbGVjdCddKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoY2hlY2tib3guY2hlY2tlZCwgJ2NoZWNrYm94IGNvbnRyb2wnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdHZXQgQXR0cmlidXRlIFBpcGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgIDxkaXYgaWQ9XCJgICsgaWQgKyBgXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphIHwgaWY6dmFsdWU6XFxcXCBcIj48L2Rpdj5gXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHNwYWNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQudG9TdHJpbmcoKSlcblxuICAgICAgICAgICAgY29uc3QgcGlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1yZXBsYWNlJyk7XG4gICAgICAgICAgICBleHBlY3QocGlwZS5sZW5ndGgpLnRvLmJlLmVxdWFsKDIwKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ21hbnVlbCB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgaWQgPSBuZXcgSUQoJ21vbnN0ZXInKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxpbnB1dCBpZD1cImAgKyBpZCArIGBcImRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpteXZhbHVlXCI+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgZ2V0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWUgPSBcImhlbGxvXCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gbmV3IFVwZGF0ZXIobW9ja3MpO1xuICAgICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8ubm90LmhhdmUucHJvcGVydHkoJ215dmFsdWUnKTtcbiAgICAgICAgICAgIHVwZGF0ZXIucmV0cmlldmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS50by5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEyXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKSAyMDIyMDEwNycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgYDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQnVnZml4ICMxMTInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYWRkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICd5ZWFoISA8Yj5UZXN0PC9iPiEnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVySFRNTCA9IGNvbnRhaW5lckVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hUTUwgPSBuZXdFbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5lckVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdj55ZWFoISA8Yj5UZXN0PC9iPiE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgLy8gZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIH0sIDEwMClcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7TG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtnZXRMb2NhbGVPZkRvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRMb2NhbGVPZkRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiZGVcIl0sXG4gICAgICAgICAgICBbXCJzbC1JVC1uZWRpc1wiXSxcbiAgICAgICAgICAgIFtcImVuLUdCXCJdLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCdyZXR1cm4gbGFuZ3VhZ2UgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBodG1sLml0ZW0oMCk7XG5cbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnbGFuZycsIGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBpdCgncmV0dXJuIGxhbmd1YWdlIGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuICAgICAgICBsZXQgbGFuZz0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcblxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnbGFuZycpO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUpLnRvLmJlLmluc3RhbmNlT2YoTG9jYWxlKTtcbiAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5nKTtcbiAgICAgICAgXG4gICAgfSlcblxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUaGVtZSwgZ2V0RG9jdW1lbnRUaGVtZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzXCI7XG5cbmRlc2NyaWJlKCdUaGVtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZS1OYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUaGVtZSgnbXktdGhlbWUnKS5nZXROYW1lKCkpLmlzLmVxdWFsKCdteS10aGVtZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIGVtcHR5IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yIGJlY2F1c2Ugbm8gc3RyaW5nIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgyKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIERlZmF1bHQgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbW9uc3RlcicpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50VGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10aGVtZS1uYW1lJywgJ3Rlc3R0aGVtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRlc3R0aGVtZSBUaGVtZSBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKS5nZXROYW1lKCkpLmlzLmVxdWFsKCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiPlxuYDtcblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG5jb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21FbGVtZW50LCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBUZXN0Q29tcG9uZW50MiwgYXNzaWduVXBkYXRlclRvRWxlbWVudCxcbiAgICAgICAgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZShcImFzc2lnblVwZGF0ZXJUb0VsZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaW5pdEpTRE9NKG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIikudGhlbigoeXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgPSB5eVsnYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50cywgb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKHRoaXMsIGVsZW1lbnRzLCB1cGRhdGVyU3ltYm9sU3ltYm9sLCBvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhpcyB0ZXN0IHRyeSB0byBzaW11bGF0ZSB0aGUgYnVnIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBhc3NpZ25VcGRhdGVyVG9FbGVtZW50IGZ1bmN0aW9uLlxuICAgICAgICAgKiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB1cGRhdGVyIHdhcyBub3QgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogdW5mb3J0dW5hdGVseSwgdGhpcyB0ZXN0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGUgYnVnLlxuICAgICAgICAgKi9cbiAgICAgICAgaXQoXCJzaG91bGQgYXNzaWduIGFuIHVwZGF0ZXIgdG8gYW4gZWxlbWVudFwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKTtcblxuICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIikuaW5uZXJIVE1MKS50by5lcXVhbChodG1sMik7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSB7YTogMX07XG4gICAgICAgICAgICBjb25zdCBiID0ge2I6IDJ9O1xuXG4gICAgICAgICAgICBjb25zdCBhcCA9IG5ldyBQcm94eU9ic2VydmVyKGEpO1xuICAgICAgICAgICAgY29uc3QgYnAgPSBuZXcgUHJveHlPYnNlcnZlcihiKTtcblxuICAgICAgICAgICAgY29uc3QgeCA9IGFwLmdldFN1YmplY3QoKVxuICAgICAgICAgICAgY29uc3QgeSA9IGJwLmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBzZXQuYWRkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LmNhbGwoZWxlbWVudCwgc2V0LCBhcCk7XG4gICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LmNhbGwoZWxlbWVudCwgc2V0LCBicCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh4KSkudG8uZXF1YWwoJ3tcImFcIjoxfScpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHkpKS50by5lcXVhbCgne1wiYlwiOjJ9Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5ID0gdXBkYXRlclN5bWJvbFN5bWJvbDtcblxuICAgICAgICAgICAgbGV0IHYgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIpO1xuICAgICAgICAgICAgZXhwZWN0KHYpLnRvLmVxdWFsKCdTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKScpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gZWxlbWVudFtzeV07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB1cGRhdGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB1IG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdS5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KHVwZGF0ZXIpLnRvLmJlLmFuLmluc3RhbmNlb2YoU2V0KTtcbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hKFwiU2V0XCIpO1xuXG4gICAgICAgICAgICB4LmEgPSAzO1xuICAgICAgICAgICAgYnAuZ2V0U3ViamVjdCgpLmIgPSA0O1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrSFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBodG1sIGV4cGV4dGVkOlxuICAgICAgICAgICAgICAgIC8vIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGluaylcIiB2YWx1ZT1cIjNcIj5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChtb2NrSFRNTC5xdWVyeVNlbGVjdG9yKFwiI3Rlc3QyXCIpKS50by5oYXZlLnZhbHVlKCczJylcbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS5hdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rJywgJ1N5bWJvbCgnICsgdXBkYXRlclN5bWJvbEtleSArICcpJylcbiAgICAgICAgICAgICAgICAvL2V4cGVjdChtb2NrSFRNTCkudG8uaGF2ZS5odG1sKHJlc3VsdEhUTUwpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQudmFsdWUpLnRvLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShhcC5nZXRSZWFsU3ViamVjdCgpKSkudG8uZXF1YWwoJ3tcImFcIjozfScpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShicC5nZXRSZWFsU3ViamVjdCgpKSkudG8uZXF1YWwoJ3tcImJcIjo0fScpO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnQ3VzdG9tRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKHt9KS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLXRlc3RjbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudClcblxuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudDIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItdGVzdGNsYXNzMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVtb3Rlc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+PC9oMT48YXJ0aWNsZT48cD50ZXN0PC9wPjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj48L2FydGljbGU+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKSB3aXRoIENvbmZpZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmVhZCBjb25maWcgZnJvbSB0YWcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPHNjcmlwdCBpZD1cImNvbmZpZzFcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZW1vdGVzdFwiOjE0MjVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPG1vbnN0ZXItdGVzdGNsYXNzMiBpZD1cInRoaXNpc2F0ZXN0XCIgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnMVwiPlxuICAgICAgICAgICAgICAgIDwvbW9uc3Rlci10ZXN0Y2xhc3MyPlxuICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9uc3RlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGlzaXNhdGVzdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChtb25zdGVyLmdldE9wdGlvbignZGVtb3Rlc3QnKSkuaXMuZXFsKDE0MjUpO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGN1c3RvbS1lbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZW1wdHkgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLXRlc3RjbGFzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzcycpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGVcbiAgICAgICAgICAgICAgICAvLyBidXQgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIlxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZXN0Y2xhc3MgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItdGVzdGNsYXNzPicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVsZW1lbnQgd2l0aCBodG1sJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItdGVzdGNsYXNzMicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIC8vIGluc2VydCBET00gcnVuIGluIGV4dHJhIHByb2Nlc3MgdmlhIHNldFRpbWVvdXQhXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzMicpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzMicpLml0ZW0oMCkuc2hhZG93Um9vdC5pbm5lckhUTUwpLmlzLmVxdWFsKCc8aDE+PC9oMT48YXJ0aWNsZT48cD50ZXN0PC9wPjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj48L2FydGljbGU+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVzdGNsYXNzMiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbCgnICsgdXBkYXRlclN5bWJvbEtleSArICcpXCI+PC9tb25zdGVyLXRlc3RjbGFzczI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LCAxMCk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnT3B0aW9ucyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJylcblxuICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdDtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm9wdGlvbnMuZGVsZWdhdGVzRm9jdXMpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudC5nZXRPcHRpb24oJ2RlbGVnYXRlc0ZvY3VzJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ3NldE9wdGlvbnMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAneDEnXSxcbiAgICAgICAgICAgICAgICBbJ3RlbXBsYXRlcy5tYWluJywgJ3gyJ10sIC8vIGlzIGV4cGxpY2l0bHkgc2V0IHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIFsnZGVsZWdhdGVzRm9jdXMnLCAneDQnXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGtleSArICcgd2FzIG5vdCBzZXQsIHRoZXJlZm9yZSBkZWZhdWx0ICcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGl0KHRleHQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkLmdldE9wdGlvbihrZXkpKS50by5iZS5ub3QuZXF1YWwobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGQuc2V0T3B0aW9uKGtleSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUuZXF1YWwobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2dldE9wdGlvbnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnc2hhZG93TW9kZScsICdvcGVuJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsIHVuZGVmaW5lZF0sIC8vIGlzIGV4cGxpY2l0bHkgc2V0IHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIFsnZGVsZWdhdGVzRm9jdXMnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ3gueS56JywgdHJ1ZSwgdHJ1ZV0sIC8vIHgueS56IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgICAgIFsneCcsIHRydWUsIHRydWVdIC8vIHggaXNudCBzZXQsIGRlZmF1bHRWYWx1ZSBpcyB1c2VkXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0ga2V5ICsgJyBzaG91bGQgcmV0dXJuICcgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGtleSArICcgd2FzIG5vdCBzZXQsIHRoZXJlZm9yZSBkZWZhdWx0ICcgKyBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGQuZ2V0T3B0aW9uKGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHgpLnRvLmJlLmVxdWFsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSB3aXRoIHdyb25nIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDEnO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT50ZXN0PC9oMT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDEpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCB0aHJvdyBFeGNlcHRpb25cIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRpdikuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItZXJyb3I9XCJUeXBlRXJyb3I6IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBDU1NTdHlsZVNoZWV0XCInKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTU3R5bGVzaGVldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTInO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTEzWDI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDExM1gyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gKG5ldyBDU1NTdHlsZVNoZWV0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBzLmluc2VydFJ1bGUoJ2EgeyBjb2xvciA6IHJlZH0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDExM1gyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uIDJcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEzXG4gICAgICAgICAqL1xuICAgICAgICBkZXNjcmliZSgnQXNzaWduIENTU1N0eWxlIGFzIEFycmF5IGFuZCBDU1MgYXMgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxMTMtMjEnO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTEzWDIyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHttYWluOiAnPGgxPnRlc3Q8L2gxPid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2EgeyBjb2xvcjpyZWQgfSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCBlcSA8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+XCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIyJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjM7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDExM1gyMjMgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHttYWluOiAnPGgxPnRlc3Q8L2gxPid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydhIHsgY29sb3I6cmVkIH0nXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDExM1gyMjMpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCBlcSA8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+XCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnaGFzTm9kZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KFwiaGFzTm9kZSBtb25zdGVyLXRlc3RjbGFzcyBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIHAxLmFwcGVuZENoaWxkKHQxKTtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdCcpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQocDEpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodCk7XG4gICAgICAgICAgICAgICAgZC5hcHBlbmRDaGlsZChwKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3MyIHNob3VsZCByZXR1cm4gLi4uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzMicpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIHAxLmFwcGVuZENoaWxkKHQxKTtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdCcpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQocDEpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodCk7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICAgICAgZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChwKTtcblxuICAgICAgICAgICAgICAgIGxldCBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUobjEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0MSkpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtGb2N1c01hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2ZvY3VzbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdGb2N1c01hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5pbm5lckhUTUwgPSAnJ1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb2N1c01hbmFnZXIoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICB9KVxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdzdG9yZSBhbmQgcmVzdG9yZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG1hbmFnZXI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDFcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgyXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4M1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDRcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGVzdGl0XCIgdGFiaW5kZXg9XCIyXCIgaWQ9XCJ0eDVcIj5oZWxsbzwvcD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDdcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlc3RpdCcpKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAyMDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncnVuIGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbWFuYWdlci5mb2N1cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHgxJykpO1xuICAgICAgICAgICAgbWFuYWdlci5zdG9yZUZvY3VzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGUxID0gbWFuYWdlci5nZXRBY3RpdmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChlMS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjEnKS50by5iZS5lcXVhbCgndHgxJyk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MicpKTtcblxuICAgICAgICAgICAgbWFuYWdlci5zdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjInKS50by5iZS5lcXVhbCgndHgyJyk7XG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzTmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IzJykudG8uYmUuZXF1YWwoJ3R4NCcpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNCcpLnRvLmJlLmVxdWFsKCd0eDUnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjUnKS50by5iZS5lcXVhbCgndHgyJyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I2JykudG8uYmUuZXF1YWwoJ3R4MScpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNycpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdyZXR1cm50eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBmb2N1c21hbmFnZXI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBmb2N1c21hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NoZWNrIHJldHVybnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0Rm9jdXNhYmxlKCkpLmlzLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5nZXRBY3RpdmUoKSkuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmZvY3VzTmV4dCgpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmZvY3VzUHJldigpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLnN0b3JlRm9jdXMoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1cyhkb2N1bWVudC5ib2R5KSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5yZXN0b3JlRm9jdXMoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG5cbn0pOyIsICJpbXBvcnQge1xuICAgIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkc1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmZ1bmN0aW9uIHNldHVwVGVzdEVudmlyb25tZW50KCkge1xuXG5cbiAgICBjbGFzcyBUZXN0Q29tcG9uZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWN1c3RvbUVsZW1lbnRzLmdldCgndGVzdC1jb21wb25lbnQnKSkge1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ3Rlc3QtY29tcG9uZW50JywgVGVzdENvbXBvbmVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGVhbnVwVGVzdEVudmlyb25tZW50KCkge1xuICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG59XG5cbmRlc2NyaWJlKCdmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMnLCAoKSA9PiB7XG4gICAgYmVmb3JlKChkb25lKSA9PiB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc2V0dXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKCgpID0+IHtcbiAgICAgICAgY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIFNldCB1cCB0aGUgRE9NXG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBpZD1cInBhcmVudFwiPlxuICAgICAgICAgIDxkaXYgaWQ9XCJjaGlsZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgY29uc3Qgc2hhZG93SG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpO1xuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gc2hhZG93SG9zdC5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW5uZXJFbGVtZW50LmlkID0gJ2lubmVyJztcbiAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgbm9ybWFsIERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hpbGQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGNoaWxkLCAncGFyZW50Jyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgdGFyZ2V0IElEIGluIHRoZSBzaGFkb3cgRE9NJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXZbc2hhZG93cm9vdF0gPiBkaXYnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGlubmVyRWxlbWVudCwgJ2lubmVyJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGlubmVyRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGlmIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpcyBub3QgZm91bmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ25vbmV4aXN0ZW50Jyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLm51bGw7XG4gICAgfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgd2luZG93UmVhZHk7XG5sZXQgZG9tUmVhZHk7XG5cbmRlc2NyaWJlKCdSZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbVJlYWR5ID0gbVsnZG9tUmVhZHknXTtcbiAgICAgICAgICAgICAgICB3aW5kb3dSZWFkeSA9IG1bJ3dpbmRvd1JlYWR5J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb21SZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGRvbVJlYWR5LnRoZW4oZG9uZSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aW5kb3dSZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlYWR5LnRoZW4oZG9uZSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBnZXREb2N1bWVudCwgZ2V0V2luZG93LCBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZ1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuXG5pbXBvcnQge2dldENvbnRhaW5pbmdEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldFdpbmRvdygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGdldFdpbmRvdygpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzxkaXY+PC9kaXY+J10sXG4gICAgICAgICAgICBbJzxkaXY+PGRpdj4yPC9kaXY+PC9kaXY+J10sXG4gICAgICAgICAgICBbJzxkaXY+PGRpdj4yPC9kaXY+JywgJzxkaXY+PGRpdj4yPC9kaXY+PC9kaXY+J10sIC8vIHRlc3QgaW52YWxpZCBodG1sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKCFiKSBiID0gYTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnRGcmFnbWVudCBvYmplY3QgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyhhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZnJhZ21lbnQpLnRvLmJlLmluc3RhbmNlT2YoRG9jdW1lbnRGcmFnbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRpdi5pbm5lckhUTUwpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldENvbnRhaW5pbmdEb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgbGV0ICBqc0RvbURvY3VtZW50O1xuXG4gICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICBqc0RvbURvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgIH0pO1xuICAgICAgICAvL1xuICAgICAgICAvLyBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAvLyAgICAgZG9tLndpbmRvdy5jbG9zZSgpO1xuICAgICAgICAvLyB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gY2FsbGVkIHdpdGggYW4gaW52YWxpZCBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBnZXRDb250YWluaW5nRG9jdW1lbnQobnVsbCkpLnRvLnRocm93KCdJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbWFpbiBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5udWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb250YWluaW5nIGRvY3VtZW50IGZvciBhbiBlbGVtZW50IGluc2lkZSBhIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBuZXN0ZWQgc2hhZG93IHJvb3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXRlckhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJTaGFkb3dSb290ID0gb3V0ZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG91dGVyU2hhZG93Um9vdC5hcHBlbmRDaGlsZChpbm5lckhvc3QpO1xuXG4gICAgICAgICAgICBjb25zdCBpbm5lclNoYWRvd1Jvb3QgPSBpbm5lckhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBpbm5lclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLm5vdC5udWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGF0dGFjaGVkIHRvIGFueSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRldGFjaGVkRWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkZXRhY2hlZEVsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChkZXRhY2hlZEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSk7ICAgIFxuICAgIFxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwic2NyaXB0aG9zdFwiPlxuLy8gICAgIDwvZGl2PlxuLy8gICAgXG4vLyAgICAgPGRpdj5cbi8vICAgICA8XG4vLyA8L2Rpdj5cbi8vIGA7XG5cblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuLy8gY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZSgnaW5pdEZyb21TY3JpcHRIb3N0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmFuZG9tVGFnTnVtYmVyID0gXCJtb25zdGVyLXRlc3RcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbVRhZ051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NhbGwgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBmb3VuZCBjYWxsYmFjayBhbmQgYWRkIGVycm9yIGF0dHJpYnV0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy50cnVlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmb3VuZCBjYWxsYmFjayBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsLWJhY2staG9zdCcpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRPcHRpb24oJ3Rlc3QnLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgZnJvbSBzZWxmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0U2xvdHRlZE5vZGVzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdnZXRTbG90dGVkTm9kZXMnLCAoKSA9PiB7XG5cblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IFNldCBpZiB0aGVyZSBpcyBubyBTaGFkb3dSb290JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0U2xvdHRlZE5vZGVzKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1xuICAgIGFkZEF0dHJpYnV0ZVRva2VuLFxuICAgIGFkZFRvT2JqZWN0TGluayxcbiAgICBjbGVhckF0dHJpYnV0ZVRva2VucyxcbiAgICBjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG4gICAgZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuICAgIGdldExpbmtlZE9iamVjdHMsXG4gICAgaGFzT2JqZWN0TGluayxcbiAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbixcbiAgICByZW1vdmVPYmplY3RMaW5rLFxuICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcbiAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbixcbiAgICBmaW5kQ2xvc2VzdEJ5Q2xhc3Ncbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgaHRtbDEsIGh0bWwyLCBodG1sMztcblxuZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaHRtbDEgPSBgPGRpdiBpZD1cInRlc3QxXCI+PC9kaXY+YDtcbiAgICAgICAgaHRtbDIgPSBgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPGRpdiBpZD1cInN1YjFcIj5cbiAgICAgICAgPGRpdiBpZD1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiAgICAgICAgXG4gICAgICAgIGh0bWwzID0gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJ0ZXN0MVwiPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIxXCIgaWQ9XCJhMVwiIGNsYXNzPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViMlwiIGlkPVwiYTJcIiBjbGFzcz1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIzXCIgaWQ9XCJhM1wiIGNsYXNzPVwic3ViM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI0XCIgaWQ9XCJhNFwiIGNsYXNzPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViNVwiIGlkPVwiYTVcIiBjbGFzcz1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcblxuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT2JqZWN0TGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG9iamVjdC1saW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSB7YTogMX07XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG8gPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkubmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG8udmFsdWUpLnRvLmVxdWFsKG9iaik7XG5cbiAgICAgICAgICAgIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaW5kQ2xvc2VzdE9iamVjdExpbmsoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdGxpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBzdWI0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YjQnKVxuICAgICAgICAgICAgbGV0IHN1YjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViMicpXG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fTtcblxuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoc3ViMiwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBmaW5kQ2xvc2VzdE9iamVjdExpbmsoc3ViNCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuaXMuaW5zdGFuY2VPZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykpLnRvLmJlLmVxdWFsKCdzdWIyJyk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEF0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViNSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMycsICdzdWIzJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMicsICdkYXRhLW1vbnN0ZXItcm9sZScsIHVuZGVmaW5lZCwgJ3N1YjInXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSgnICsgYSArICcsICcgKyBiICsgJywnICsgYyArICcpIHNob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIsIGMpLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXJvbGUnKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IFxuICAgICAgICBcbiAgICAgICAgZGVzY3JpYmUoJ2ZpbmQgY2xvc2VzdCBFbGVtZW50IHdpdGggY2xhc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EzJywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWI1JywgJ3N1YjUnXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUNsYXNzKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdHJpYnV0ZUtleSA9ICdkYXRhLXRlc3QnO1xuXG4gICAgICAgIGl0KCd0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBwaW5hcHBsZScpO1xuICAgICAgICAgICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ3BpbmFwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hIGxlbW1vbicpXG4gICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBsZW1tb24nKTtcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGxlbW1vbicpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2FwcGxlJykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgdG9tYXRvJylcbiAgICAgICAgICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3RvbWF0bycsICdsZW1tb24nKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScsICdwZWFyJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgcGVhciBsZW1tb24nKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwgYXRyaWJ1dGVLZXkpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJycpO1xuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG59KSIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmxldCBSZXNvdXJjZSxEZXJpdmVkUmVzb3VyY2U7XG5cblxuXG5kZXNjcmliZSgnUmVzb3VyY2UnLCBmdW5jdGlvbigpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlc291cmNlID0gbVsnUmVzb3VyY2UnXTtcblxuXG4gICAgICAgICAgICAgICAgRGVyaXZlZFJlc291cmNlID0gY2xhc3MgIGV4dGVuZHMgUmVzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdXJsXCI6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGEtdXJsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEZXJpdmVkUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFJlc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBEZXJpdmVkUmVzb3VyY2UoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihSZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1cmwnKVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVzb3VyY2VNYW5hZ2VyKCkgc2hvdWxkIHJldHVybiBSZXNvdXJjZU1hbmFnZXIgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsb2FkIHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2FkZCBzY3JpcHQgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIHN0eWxlIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIGRhdGEgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY29ubmVjdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjb25uZWN0ICBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBzdHlsZSBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgIHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSBleGFtcGxlLmpzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGNvbnRlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWRkRGF0YSgnaHR0cHM6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmpzb24nKS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5vdXRlckhUTUwpLmNvbnRhaW5zKCc+e1wiYVwiOlwidGVzdFwifTwvc2NyaXB0PjwvaGVhZD4nKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqL1xuY29uc3QgQVRUUklCVVRFUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogQXNzZW1ibGVyIGNsYXNzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEFsbG93cyB5b3UgdG8gYnVpbGQgYW4gaHRtbCBmcmFnbWVudFxuICovXG5jbGFzcyBBc3NlbWJsZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihmcmFnbWVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBBVFRSSUJVVEVQUkVGSVg7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShmcmFnbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpKTtcblx0XHR0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcmV0dXJucyB7QXNzZW1ibGVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0QXR0cmlidXRlUHJlZml4KHByZWZpeCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBwcmVmaXg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUNvbnRyb2wsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIGpzZG9tRmxhZztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oe30pLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgbS5wb2x5ZmlsbCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGpzZG9tIGRvZXMgbm90IHN1cHBvcnQgRWxlbWVudEludGVybmFsc1xuICAgICAgICAgICAganNkb21GbGFnID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcImpzZG9tXCIpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbnRyb2wgPSBtWydDdXN0b21Db250cm9sJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItY3VzdG9tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2Zvcm1EaXNhYmxlZENhbGxiYWNrKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFxuICAgICAgICBsZXQgZWxlbWVudFxuICAgICAgICBcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVudGlyZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBkZXNjcmlwdGlvbiBvZiByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2wyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLm5vdC5udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbDInKTtcblxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmZvcm1EaXNhYmxlZENhbGxiYWNrKCkpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayh0cnVlKSkudG8uYmUudW5kZWZpbmVkO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgY29uc3QgZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLm5vdC5iZS5udWxsO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUNvbnRyb2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjdXN0b20tZWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IFRlc3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5udWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHR5cGVvZiBkLFwic3Nzc1wiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItY3VzdG9tY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ25hbWUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQubmFtZSkudG8uYmUubnVsbDtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd0eXBlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnR5cGUpLnRvLmJlLmVxdWFsKCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWxpZGl0eSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRhdGlvbk1lc3NhZ2UgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnd2lsbFZhbGlkYXRlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0KCdjaGVja1ZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdyZXBvcnRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIGl0KCdzZXRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNldFZhbGlkaXR5KHsndmFsdWVNaXNzaW5nJzogdHJ1ZX0sIFwibXkgbWVzc2FnZVwiKSkudG8uYmUudW5kZWZpbmVkO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfVEhFTUVfTkFNRX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQge2ZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZVwiPjwvdGVtcGxhdGU+YDtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgSFRNTEZyYWdtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+PGRpdj5zZWNvbmQ8L2Rpdj5cIl0sXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxwPnNlY29uZDwvcD5cIl1cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpLmdldE5ld0RvY3VtZW50RnJhZ21lbnRBc1N0cmluZygpIHNob3VsZCByZXR1cm4gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKSBzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoVGVtcGxhdGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGVtcGxhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSBzaG91bGQgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVtcGxhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5nZXRUZW1wbGF0ZUVsZW1lbnQoKSkudG8uYmUuaW5zdGFuY2VPZihIVE1MVGVtcGxhdGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVGVtcGxhdGUgbm90IGZvdW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmREb2N1bWVudFRlbXBsYXRlKFwibm93YXlcIiwgZGl2KVxuICAgICAgICAgICAgfSkudG8udGhyb3dzKEVycm9yKTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZmluZERvY3VtZW50VGVtcGxhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdUaG1lbmVkIFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG1lbUF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48cD4xPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjI8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZS10ZXN0dGhlbWVcIj48cD40PC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15cHJlZml4LW15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjM8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBtZW1BdHRyaWJ1dGVWYWx1ZSA9IGh0bWwuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaHRtbC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWVtQXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsIG1lbUF0dHJpYnV0ZVZhbHVlKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGVtcGxhdGUgb3ZlciBvd25lckRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnLCAnbXlwcmVmaXgnKVxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnKVxuICAgICAgICAgICAgICAgIGxldCB0MiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MikuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCIyXCIpO1xuXG4gICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsJ3Rlc3R0aGVtZScpO1xuICAgICAgICAgICAgICAgIGxldCBhPSBodG1sLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICBsZXQgdDMgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0My5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiNFwiKTtcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge2ZpcmVFdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsIGZpcmVDdXN0b21FdmVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRXZlbnRzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaW5kIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXInLCAnaGVsbG8nKTtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgJ2RhdGEtbW9uc3RlcicpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyJykpLnRvLmJlLmVxdWFsKCdoZWxsbycpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICAgICAgfSwgMClcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpcmVFdmVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSBjbGljayBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVFdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmaXJlRXZlbnQoe30sICd0b3VjaCcpKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmlyZUN1c3RvbUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIGNsaWNrIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGRpdiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24xJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRldGFpbCAhPT0gJ2hlbGxvIHdvcmxkJykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnLCBcImhlbGxvIHdvcmxkXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uMicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5hICE9PSAnaGVsbG8gd29ybGQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcsIHthOiBcImhlbGxvIHdvcmxkXCJ9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZmlyZUN1c3RvbUV2ZW50KHt9LCAndG91Y2gnKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcblxuZXhwb3J0IHsgRG9tU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBEb21TdG9yYWdlIGlzIGEgY2xhc3MgdGhhdCBzdG9yZXMgZGF0YSBpbiBtZW1vcnkuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cbmNsYXNzIERvbVN0b3JhZ2UgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRhdGFzb3VyY2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvZG9tLXN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy5yZWFkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0cy5yZWFkLnNlbGVjdG9yXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy53cml0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMud3JpdGUuc2VsZWN0b3Jcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRzZWxlY3RvcjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuc2VsZWN0b3JcIiwgdW5kZWZpbmVkKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcmVhZCBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKCFzdG9yYWdlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlLmlubmVySFRNTCk7XG5cdFx0XHRcdHRoaXMuc2V0KGRhdGEpO1xuXHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZSB3cml0ZSBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNlbGVjdG9yXCIpO1xuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSB3cml0ZSBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKCFzdG9yYWdlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzdG9yYWdlLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0KCkpO1xuXHRcdFx0XHRyZXNvbHZlKHN0b3JhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEb21TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlRG9tcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgaW5pdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBkb20gPSBuZXcgRG9tU3RvcmFnZSh7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3QoZG9tKS50by5iZS5ub3QubnVsbFxuXG5cbiAgICB9KVxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9jYWxTdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdMb2NhbFN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGxvY2FsU3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxvY2FsU3RvcmFnZVJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2xvY2FsU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ2xvY2FsU3RvcmFnZSddID0gY3JlYXRlU3RvcmFnZSgpO1xuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgTG9jYWxTdG9yYWdlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoTG9jYWxTdG9yYWdlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiZnVuY3Rpb24gY3JlYXRlU3RvcmFnZSgpIHtcbiAgICBcbiAgICBsZXQgVU5TRVQgPSBTeW1ib2woKTtcbiAgICBsZXQgcyA9IHt9LFxuICAgICAgICBub29wQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSBub29wQ2FsbGJhY2s7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3NldEl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChrLCB2ID0gVU5TRVQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gVU5TRVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEl0ZW0nIG9uICdTdG9yYWdlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAoIXMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayhzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNba10gPSB2ICsgJyc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdnZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzW2tdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3JlbW92ZUl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGsgPT4ge1xuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnY2xlYXInLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnbGVuZ3RoJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJrZXlcIiwge1xuICAgICAgICB2YWx1ZTogayA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocylba107XG4gICAgICAgICAgICByZXR1cm4gKCFrZXkpID8gbnVsbCA6IGtleTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2l0ZW1JbnNlcnRpb25DYWxsYmFjaycsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX2l0ZW1JbnNlcnRpb25DYWxsYmFjaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB2ID0+IHtcbiAgICAgICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdiA9IG5vb3BDYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSB2O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHM7XG59XG5cblxuZXhwb3J0IHtjcmVhdGVTdG9yYWdlfTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qc1wiO1xuaW1wb3J0IHtjcmVhdGVTdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzXCI7XG5cblxubGV0IHN0b3JhZ2VSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdTZXNzaW9uU3RvcmFnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBzdG9yYWdlUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgc3RvcmFnZVJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ11cbiAgICAgICAgZ2xvYmFsVGhpc1snc2Vzc2lvblN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIFNlc3Npb25TdG9yYWdlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBTZXNzaW9uU3RvcmFnZSgnbXlrZXknKSkudG8uYmUuaW5zdGFuY2VvZihTZXNzaW9uU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBTZXNzaW9uU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnU2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgd3JpdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG4gICAgICAgIGxldCByZWFkQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoe1xuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25Xcml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uV3JpdGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaGVhdGhpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZW1vOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ejogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiZGF0YS54eXpcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25SZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWFkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiAnZGF0YS54eXonLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGV4cGVjdChzZXJ2ZXIudHJhbnNmb3JtU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuICAgICAgICBleHBlY3Qoc2VydmVyLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pKS50by5kZWVwLmVxdWFsKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pXG5cblxuICAgIH0pXG5cbn0pO1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuLy8gY29uc3QgZyA9IGdldEdsb2JhbCgpO1xuLy8gZ1snV2ViU29ja2V0J10gPSBXUztcblxuXG5kZXNjcmliZSgnV2Vic29ja2V0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGRzID0gdW5kZWZpbmVkXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdFdlYlNvY2tldCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaWYgKGRzKSB7XG4gICAgICAgICAgICBkcy5jbG9zZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3b3JrYXJvdW5kOiB3aXRob3V0IHRoaXMsIHRoZSBub2RlIHRlc3Qgd2lsbCBoYW5nIFxuICAgICAgICBmb3IgKGNvbnN0IHN5bSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRzKSkge1xuICAgICAgICAgICAgaWYgKHN5bS50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBkc1tzeW1dXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzeW0yIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bTIudG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3Rpb25bc3ltMl0/LnNvY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBjbG9uZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHRlc3RVcmwpXG4gICAgICAgIGNvbnN0IGNsb25lID0gZHMuZ2V0Q2xvbmUoKVxuXG4gICAgICAgIGV4cGVjdChjbG9uZSkudG8uYmUuYW4uaW5zdGFuY2VvZihXZWJDb25uZWN0KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkcy5zZXQoe1xuICAgICAgICAgICAgICAgIGVudmVsb3A6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRzLnNldCh7fSlcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cblxuICAgICAgICAgICAgICAgICAgICBkcy5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe2VudmVsb3A6e21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh3cml0ZUNhbGxiYWNrQ2FsbGVkKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QocmVhZENhbGxiYWNrQ2FsbGVkKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAyMDApXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRzLnNldCh7XG4gICAgICAgICAgICAgICAgZW52ZWxvcDoge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgZHMuc2V0KHt9KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7fSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBkcy5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7ZW52ZWxvcDp7bWVzc2FnZTogXCJIZWxsbyBXb3JsZFwifX0pO1xuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LDUwMClcbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pLnRpbWVvdXQoMTAwMDApO1xuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UmVzdEFQSX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzXCI7XG5pbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5kZXNjcmliZSgnUmVzdEFQSScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZTtcbiAgICBsZXQgcmV0dXJuU3RhdHVzO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgcmV0dXJuU3RhdHVzID0gMjAwO1xuICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgUmVzdEFQSSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgUmVzdEFQSSgnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJykpLnRvLmJlLmluc3RhbmNlb2YoUmVzdEFQSSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe1xuICAgICAgICAgICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWRTdGF0dXM6IFs5OV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKFwic2hvdWxkIG5vdCBiZSBoZXJlXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3J3IHdpdGggZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCB0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuU3RhdHVzID0gNDAwOyAvLyBmZXRjaCByZXNwb25zZSB3aXRoIDQwMFxuXG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoXCJzaG91bGQgbm90IHJ1bi5cIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7IC8vIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSByZXR1cm5TdGF0dXM9NDAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IDQwMDsgLy8gZmV0Y2ggcmVzcG9uc2Ugd2l0aCA0MDBcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9LCB7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgZG9uZShcImVycm9yXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpOyAvLyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2UgcmV0dXJuU3RhdHVzPTQwMFxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEYXRhc291cmNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcblxuXG5kZXNjcmliZSgnRGF0YXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBEYXRhc291cmNlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBEYXRhc291cmNlKCkpLnRvLmJlLmluc3RhbmNlb2YoRGF0YXNvdXJjZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0T3B0aW9uIHNob3VsZCBjaGFuZ2UgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgIGRhdGFzb3VyY2Uuc2V0T3B0aW9uKCdkZWZhdWx0JywgdHJ1ZSlcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzZXRPcHRpb25zIHNob3VsZCBzZXQgYWxsIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgZGF0YXNvdXJjZS5zZXRPcHRpb25zKHtkZWZhdWx0OiB0cnVlfSlcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkYXRhc291cmNlLnJlYWQoKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZGF0YXNvdXJjZS5yZWFkKCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2dldC9zZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICBpdCgnZ2V0IHNob3VsZCByZXR1cm4gdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe30pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7fSk7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2Uuc2V0KHthOidteXZhbHVlJ30pKS50by5iZS5pbnN0YW5jZW9mKERhdGFzb3VyY2UpO1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe2E6J215dmFsdWUnfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtidWlsZE1hcH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdidWlsZE1hcCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIE1hcCB3aXRoIGNhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIG1hcCB3aXRoIHN1YiBhbmQgcGFyZW50IGtleXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBuZXcgTWFwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkxID0gaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqLCBjXSBvZiBPYmplY3QuZW50cmllcyhiLmVucmljaG1lbnQudmFyaWFudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MiA9IGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIGRdIG9mIE9iamVjdC5lbnRyaWVzKGMucHJpY2UpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLm5hbWUgPSBiLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCA9IFtrZXkxLCBrZXkyLCBrZXkzXS5qb2luKCcuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCBjYWxsYmFjaywgJyR7bmFtZX0gJHtsYWJlbH0nLCAnJHtpZH0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcIjAuMC4wXCI6XCJDYXNzYW5kcmEgWFhTXCIsXCIwLjAuMVwiOlwiQ2Fzc2FuZHJhIFhYU1wiLFwiMC4xLjBcIjpcIkNhc3NhbmRyYSBYU1wiLFwiMC4xLjFcIjpcIkNhc3NhbmRyYSBYU1wiLFwiMC4yLjBcIjpcIkNhc3NhbmRyYSBTXCIsXCIwLjIuMVwiOlwiQ2Fzc2FuZHJhIFNcIixcIjAuMy4wXCI6XCJDYXNzYW5kcmEgTFwiLFwiMC4zLjFcIjpcIkNhc3NhbmRyYSBMXCIsXCIxLjAuMFwiOlwiWWVzc2V5ISBYWFNcIixcIjEuMC4xXCI6XCJZZXNzZXkhIFhYU1wiLFwiMS4xLjBcIjpcIlllc3NleSEgWFNcIixcIjEuMS4xXCI6XCJZZXNzZXkhIFhTXCIsXCIxLjIuMFwiOlwiWWVzc2V5ISBTXCIsXCIxLjIuMVwiOlwiWWVzc2V5ISBTXCIsXCIxLjMuMFwiOlwiWWVzc2V5ISBMXCIsXCIxLjMuMVwiOlwiWWVzc2V5ISBMXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIHN1Ym1hcCB3aXRoIConLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4ge1wiMTBcIjpcIkNhc3NhbmRyYSAxMFwiLFwiMjBcIjpcIlllc3NleSEgMjBcIn0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gJHtpZH0nLCAnJHtpZH0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCIxMFwiOlwiQ2Fzc2FuZHJhIDEwXCIsXCIyMFwiOlwiWWVzc2V5ISAyMFwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIHN1Ym1hcCB3aXRoICoqJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIE1hcCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogNX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogN30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDl9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAxMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogMTF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAxMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiAxM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDE0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiAxNX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDE2fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0NC4xMiBcdTIwQUMnLCBpZDogMTd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLiouZW5yaWNobWVudC52YXJpYW50cy4qLnByaWNlLionLCAnJHt2a30gJHteLmxhYmVsfSAke14uXi5uYW1lfScsICcke14uXi5za3V9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4wXCI6XCIxMi4xMiBcdTIwQUMgWFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4xXCI6XCIxMi4xMiBcdTIwQUMgWFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4wXCI6XCIyMi4xMiBcdTIwQUMgWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjFcIjpcIjIyLjEyIFx1MjBBQyBYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMFwiOlwiMzIuMTIgXHUyMEFDIFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjFcIjpcIjMyLjEyIFx1MjBBQyBTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4wXCI6XCI0Mi4xMiBcdTIwQUMgTCBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMVwiOlwiNDIuMTIgXHUyMEFDIEwgQ2Fzc2FuZHJhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjBcIjpcIjEyLjEyIFx1MjBBQyBYWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4xXCI6XCIxMi4xMiBcdTIwQUMgWFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMFwiOlwiMjIuMTIgXHUyMEFDIFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMVwiOlwiMjIuMTIgXHUyMEFDIFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMFwiOlwiMzIuMTIgXHUyMEFDIFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4xXCI6XCIzMi4xMiBcdTIwQUMgUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjBcIjpcIjQyLjEyIFx1MjBBQyBMIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMVwiOlwiNDIuMTIgXHUyMEFDIEwgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4yXCI6XCI0NC4xMiBcdTIwQUMgTCBZZXNzZXkhXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGVjb2RlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBleGFtcGxlIGNvZGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjQ5My00MTA1IFZ1bHB1dGF0ZSBTdHJlZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJTYXVtdXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjUyNjI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkhvbGx5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiMTc2MiBFZ2V0IFJkLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlNjaHdhbGJhY2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjk1MjM0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJHdXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCI5NTctMzg4IFNvbGxpY2l0dWRpbiBBdmVudWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJQYW5jaGlcdTAwRTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjQyMDcyOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwO1xuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknLCAnaWQnKVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuXG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScpXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG5cbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJywgJ2lkJywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlWydpZCddID49IDIwKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkbWFwKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxMDA4MlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMTAwODRcIjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE1hcCBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRNYXAoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ2FkZHJlc3MnLCAne1wiZGF0YXNldC4xMDA4MlwiOlwiSGVyZSAxXCIsXCJkYXRhc2V0LjEwMDg0XCI6XCJIZXJlIDJcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsIHVuZGVmaW5lZCwgJ3t9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICduYW1lJywgJ3tcImRhdGFzZXQuMTAwODJcIjpcIlRlc3QgMVwiLFwiZGF0YXNldC4xMDA4NFwiOlwiVGVzdCAyXCJ9J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRNYXAoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShjKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGQpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBidWlsZE1hcChhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICBsZXQgbSA9IEpTT04uc3RyaW5naWZ5KGNvbnZlcnRNYXBSZXN1bHQodCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChtKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VHJhbnNmb3JtZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHByb21pc2VzLnB1c2goaW5pdEpTRE9NKCkpO1xuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCIwNC4wMi4yMDIzLCAwODowMjowMVwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQ6bG9uZzpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLFwiNC4gRmVicnVhciAyMDIzIHVtIDA4OjAyXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdDpzaG9ydDpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIjA0LjAyLjIzLCAwODowMlwiXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmEnLCBcImFcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvbicsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9mZicsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmZhbHNlJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDMsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnVuZGVmaW5lZCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCAzLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjBcIiwgXCIwLDAwXHUwMEEwXHUyMEFDXCJdLFxuICAgICAgICAgICAvLyAgWydjdXJyZW5jeToxOjInLCBcIkVVUjE0LjI1XCIsIFwiMTQsMlx1MDBBMFx1MjBBQ1wiXSwgIG5vZGVqcyBhbmQgYnJvd3NlciBoYXZlIGRpZmZlcmVudCByZXN1bHRzIChodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMjQpIFxuICAgICAgICAgICAgWydjdXJyZW5jeScsIFwiRVVSMTQuMjVcIiwgXCIxNCwyNVx1MDBBMFx1MjBBQ1wiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWUnLCBcIjIwMjMtMDItMTQgMTQ6MTI6MTBcIiwgXCIxNC4yLjIwMjMsIDE0OjEyOjEwXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZScsIFwiMjAyMy0wMi0xNCAwODowMjowMVwiLCBcIjE0LjIuMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywge30sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCB7YTo0fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW10sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzEsMiwzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzFdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbXCIxXCJdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbdHJ1ZV0sIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgXCJhc2Qgd3hkIHNkZlwiLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFwiYXNkIHdkIHNkZlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOmInLCBbXCJhXCIsXCJiXCIsXCJjXCJdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFtcImFcIixcImJcIixcImNcIl0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIG51bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bGwnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc251bGwnLCBudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgXCJcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LjUsIHRydWVdLFxuICAgICAgICAgICAgWydpc2ludGVnZXInLCA0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzZmxvYXQnLCA1LjYsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc29iamVjdCcsIDQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCB7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBbe31dLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNhcnJheScsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnbm90JywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydtYXA6YT00OmI9NTpjPTYnLCBcImFcIiwgXCI0XCJdLFxuICAgICAgICAgICAgWydkYXRlJywgXCIyMDIzLTAyLTE0XCIsIFwiMTQuMi4yMDIzXCJdLFxuICAgICAgICAgICAgWyd5ZWFyJywgXCIyMDIzLTAyLTE0XCIsIDIwMjNdLFxuICAgICAgICAgICAgWydtb250aCcsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnZGF5JywgXCIyMDIzLTAyLTE0XCIsIDE0XSxcbiAgICAgICAgICAgIFsnd2Vla2RheScsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnbWludXRlcycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCAxMl0sXG4gICAgICAgICAgICBbJ3NlY29uZHMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMjFdLFxuICAgICAgICAgICAgWydob3VycycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCA2XSxcbiAgICAgICAgICAgIFsndGltZScsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCBcIjA2OjEyOjIxXCJdLFxuICAgICAgICAgICAgWyd0aW1lc3RhbXAnLCBcIjIwMjMtMDItMTRcIiwgMTY3NjMzMjgwMDAwMF0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzp0ZXN0OmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0dGVzdDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzpcXFxcIFxcXFwgOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0ICA2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCw2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDpcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCwgNlwiXSxcbiAgICAgICAgICAgIFsnPz86YScsIG51bGwsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCB1bmRlZmluZWQsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCAndHJ1ZScsICd0cnVlJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWycgaWY6YTogJywgZmFsc2UsIHVuZGVmaW5lZF0sIC8vIHdpdGhvdXQgXFxcXFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIGZhbHNlLCBcIiBcIl0sXG4gICAgICAgICAgICBbJyBpZjphOlxcXFwgJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnVuZGVmaW5lZDpib29sJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgbnVsbCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIHVuZGVmaW5lZCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6b246Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dHJ1ZTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXM6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6ZmFsc2U6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6aW50JywgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOnN0cmluZycsIHVuZGVmaW5lZCwgJzEnXSxcbiAgICAgICAgICAgIFsnZmlyc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbGFzdC1rZXknLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MCcsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToxJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAyXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYjogMiwgYzogM30sIDNdLFxuICAgICAgICAgICAgWydudGgta2V5OjAnLCB7YzogMywgYTogMSwgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydwcmVmaXg6SGVsbG9cXFxcICcsICd0ZXN0JywgXCJIZWxsbyB0ZXN0XCJdLFxuICAgICAgICAgICAgWyd0b2pzb24nLCB7YTogNH0sIFwie1xcXCJhXFxcIjo0fVwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcXFxcXDogJywgJ3Rlc3QnLCBcImFcXFxcdGVzdFwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcICcsICd0ZXN0JywgXCJhIHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N0YXRpYzphYmM6YTpiOngnLCBcInRlc3RcIiwgXCJhYmM6YTpiOnhcIl0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgXCJBOmI6Q3NlNFwiLCBcImE6Yjpjc2U0XCJdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgXCJBOmI6Q3NlNFwiLCBcIkE6QjpDU0U0XCJdLFxuICAgICAgICAgICAgWyd0b3N0cmluZycsIDUsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCBbMSwgMiwgMywge31dLCBcIjEsMiwzLFtvYmplY3QgT2JqZWN0XVwiXSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCI1XCIsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgNSBcIiwgXCI1XCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgYVwiLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiBcIiwgXCJcIl0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFwiXHUwMEZDXHUwMEY2XHUwMEU0XCIsIFwiJUMzJUJDJUMzJUI2JUMzJUE0XCJdLFxuICAgICAgICAgICAgWydjYWxsOnRlc3RjYWxsYmFjazo0OjU6NicsIFwidGVzdFwiLCBcInRlc3Q0NTZcIl0sXG4gICAgICAgICAgICBbJ3BsYWluJywgJ3Q8YnI+ZXN0JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB0cnVlLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdvbicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ3RydWUnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdmYWxzZScsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgOSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnJywgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB1bmRlZmluZWQsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgZmFsc2UsIFwiYlwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjYXInLCBcIkNhclwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjQXInLCBcIkNBclwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0ZXN0JywgJ2EnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsIHVuZGVmaW5lZCwgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICd7fScsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne1wiYVwiOjF9Jywge2E6IDF9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsICdjQXIgcnVucycsIFwiQ0FyIFJ1bnNcIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsICc2JywgNl0sXG4gICAgICAgICAgICBbJ2xlbmd0aCcsICd0ZXN0JywgNF0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICdIZWxsbyBXb3JsZCEnLCBcIlNHVnNiRzhnVjI5eWJHUWhcIl0sXG4gICAgICAgICAgICBbJ2Zyb20tYmFzZTY0JywgJ1NHVnNiRzhnVjI5eWJHUWgnLCBcIkhlbGxvIFdvcmxkIVwiXSxcbiAgICAgICAgICAgIFsndG8tYmFzZTY0JywgJ3Rlc3QnLCBcImRHVnpkQT09XCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsIFwiZEdWemRBPT1cIiwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncHJlZml4OmEnLCAndGVzdCcsIFwiYXRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N1ZmZpeDphJywgJ3Rlc3QnLCBcInRlc3RhXCJdLFxuICAgICAgICAgICAgWydpbmRleDphJywge2E6IDR9LCA0XSxcbiAgICAgICAgICAgIFsnaW5kZXg6MicsIFsyLCA0LCA3XSwgN10sXG4gICAgICAgICAgICBbJ2luZGV4Ong6dGVzdCcsIFsyLCA0LCA3XSwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIHthOiB7Yjoge2M6IDR9fX0sIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5kJywge2E6IHtiOiB7YzogNH19fSwgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIG5ldyBNYXAoKS5zZXQoJ2EnLCA1KSwgNV0sXG4gICAgICAgICAgICBbJ3N1YnN0cmluZzoyOjQnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdjZGVmJ10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYiBjJywgJ2EgYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGInLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjJywgJ2EgYiBjJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYicsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiLGMnLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGIsYyxkJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjLGQ6LCcsICdhLGIsYycsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG5cbiAgICAgICAgICAgICAgICB0LnNldENhbGxiYWNrKCd0ZXN0Y2FsbGJhY2snLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXFsKGMsIFwiVHJhbnNmb3JtZXIucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYSkgKyBcIikucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYikgKyBcIikgc2hvdWxkIHJldHVybiBcIiArIEpTT04uc3RyaW5naWZ5KGMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpIHRocm93cyBFcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgW11dLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIHt9XSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCA0LjVdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCA1XSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCJhXCJdLFxuICAgICAgICAgICAgWyd0cmltJywgNV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCB0cnVlXSxcbiAgICAgICAgICAgIFsndHJpbScsIHt9XSxcbiAgICAgICAgICAgIFsndHJpbScsIFtdXSxcbiAgICAgICAgICAgIFsncmF3dXJsZW5jb2RlJywgW11dLFxuICAgICAgICAgICAgWydpZjphOmInLCB7fV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCB7fV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCA0XSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIFwiXCIsIDRdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCB7fV0sXG4gICAgICAgICAgICBbJ2Jhc2U2NCcsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAnJ10sXG4gICAgICAgICAgICBbJ3ByZWZpeCcsIHt9XSxcbiAgICAgICAgICAgIFsnc3VmZml4Jywge31dLFxuICAgICAgICAgICAgWydpbmRleCcsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsneHh4eHh4JywgXCJ0ZXN0XCJdLCAvLyB1bnN1cHBvcnRlZCBjb21tYW5kXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdC5ydW4oYikpLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCkucnVuKFwidW5pcWlkXCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBTdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcigndW5pcWlkJyk7XG4gICAgICAgICAgICBleHBlY3QodC5ydW4oXCJcIikpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpLnJ1bihcImRlZmF1bHQ6ZXlKaUlqb3hmUT09Om9iamVjdFwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ2RlZmF1bHQ6ZXlKaUlqb3hmUT09Om9iamVjdCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQucnVuKHVuZGVmaW5lZCkpLnRvLmVxbCh7YjogMX0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zZm9ybWVyKFwiXCIpKS50by5pbnN0YW5jZU9mKFRyYW5zZm9ybWVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNmb3JtZXIoXCJzdWZmaXg6YWJjXCIpKS50by5pbnN0YW5jZU9mKFRyYW5zZm9ybWVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2ZhbHNlIGFzIGFyZ3VtZW50IHNob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2Zvcm1lcihmYWxzZSlcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdvYmplY3QgYXMgYXJndW1lbnQgc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybWVyKHt9KVxuICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdpMThuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBodG1sMSA9IGBcbjxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gIFxuYDtcblxuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThuOnRlc3QxJywgXCJcIiwgXCJ4eXpcIl0sXG4gICAgICAgICAgICBbJ2kxOG46JywgXCJ0ZXN0MVwiLCBcInh5elwiXSwgLy8ga2V5IGJ5IHZhbHVlXG4gICAgICAgICAgICBbJ2kxOG46OicsIFwidGVzdDFcIiwgXCJ4eXpcIl0sIC8vIGtleSBieSB2YWx1ZSBubyBkZWZhdWx0XG4gICAgICAgICAgICBbJ2kxOG46OmVlZScsIFwidGVzdDJcIiwgXCJlZWVcIl0sIC8vIGtleSBieSB2YWx1ZSB3aXRoIGRlZmF1bHRcbiAgICAgICAgICAgIFsnaTE4bjo6ZGRkJywgXCJ0ZXN0MlwiLCBcImRkZFwiXSwgLy8ga2V5IGJ5IHZhbHVlIGFuZCBkZWZhdWx0XG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0oJyArIGEgKyAnKS5ydW4oJyArIGIgKyAnKSByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4oYikpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkaWZmfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7UXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzXCI7XG5cbmRlc2NyaWJlKCdEaWZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0RpZmYgc3BlY2lhbCBjYXNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgb2JqMSwgb2JqMjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG9iajEgPSB7XG4gICAgICAgICAgICAgICAgXCJjb3VudFwiOiAxLFxuICAgICAgICAgICAgICAgIFwicmVhc29uXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgXCJpbmZvXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBvYmoyID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMixcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgXCJleGNoYW5nZVwiOiBbXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiB2YWx1ZSB3aXRoIG51bGwgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKG9iajEsIG9iajIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbCgnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJjb3VudFwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiaW5mb1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjpcInRlc3RcIixcInR5cGVcIjpcInN0cmluZ1wifX1dJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdEaWZmIGlkZW50aWNhbCB2YWx1ZSB3aXRoIG51bGwgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKG9iajEsIG9iajEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbCgnW10nKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBjb25zdCBkYXRlMSA9IG5ldyBEYXRlO1xuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS9wYXJzZVxuICAgIGNvbnN0IGRhdGUyID0gRGF0ZS5wYXJzZSgnMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UJyk7XG4gICAgY29uc3QgZGF0ZTMgPSBEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMCBHTVQnKTsgLy8gTnVtYmVyXG4gICAgY29uc3QgZGF0ZTQgPSBEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKTsgLy8gTnVtYmVyXG5cbiAgICBjb25zdCBkYXRlNSA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAxIEdNVCcpKTsgLy8gRGF0ZVxuICAgIGNvbnN0IGRhdGU2ID0gbmV3IERhdGUoRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDIgR01UJykpOyAvLyBEYXRlXG5cbiAgICBbXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbmV3IFF1ZXVlKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkYXRhXCI6W119LFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiUXVldWVcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZTogM1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIixcImJcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIixcImVcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjMsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJjXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOntcImRcIjoyfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIk9iamVjdFwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImZcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOntcImRcIjoyfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIk9iamVjdFwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMSxcbiAgICAgICAgICAgICAgICBjOiBkYXRlNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMixcbiAgICAgICAgICAgICAgICBiOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCInICsgZGF0ZTEudG9JU09TdHJpbmcoKSArICdcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJjXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMTAwMCxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImJcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiOiBkYXRlNlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAxLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpcIjE5OTUtMTItMDRUMDA6MTI6MDIuMDAwWlwiLFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiRGF0ZVwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeDogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcInhcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAyLFxuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJvYmplY3RcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbXSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJvYmplY3RcIn19XSdcbiAgICAgICAgXSwgW1xuICAgICAgICB7fSxcbiAgICAgICAge2E6IHVuZGVmaW5lZH0sXG4gICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ0eXBlXCI6XCJ1bmRlZmluZWRcIn19XSdcbiAgICBdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnRGlmZiBzaG91bGQgcmVzdWx0ICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYoYSwgYik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKGMpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtidWlsZFRyZWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdidWlsZFRyZWUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBvYmplY3RzID0ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmVoaWNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInRydWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdG9yY3ljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU1VWXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNwb3J0cyBjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBidWlsZFRyZWUob2JqZWN0cywgJ2RhdGFzZXQuKicsICdpZCcsICdwYXJlbnQnKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVzKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy5sZW5ndGgpLnRvLmVxdWFsKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGVzLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwidmVoaWNsZVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcImNhclwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlNVVlwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcInNwb3J0cyBjYXJcIixcInBhcmVudFwiOlwiMlwifVxcbiBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwidHJ1Y2tcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwibW90b3JjeWNsZVwiLFwicGFyZW50XCI6XCIxXCJ9JyApO1xuXG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkVHJlZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCAnJ10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjFcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKSB0ZXN0IDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDJcbiAgICAgICAgICogICAgMVxuICAgICAgICAgKiAgICAzXG4gICAgICAgICAqIDRcbiAgICAgICAgICogICAgNlxuICAgICAgICAgKiA1XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjdcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA3XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA3XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTm9kZSBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRUcmVlKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMFwifVxcbiBcdTI1MUN7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI3XCIsXCJuYW1lXCI6XCJUZXN0IDdcIixcImFkZHJlc3NcIjpcIkhlcmUgN1wiLFwicGFyZW50XCI6XCIxXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxue1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG57XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMFwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRUcmVlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZWxpc3QgPSBidWlsZFRyZWUoYSwgYiwgJ2lkJywgJ3BhcmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdFJlZmVyZW5jZXM6IFsnMCddXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYyk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BhdGhmaW5kZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG5cbiAgICBkZXNjcmliZSgnd2l0aCBXaWxkY2FyZCBhbmQgSXRlcmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICAgICAgYTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogJyEnXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICc/J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EuKi5iLionLCAne1wiMFwiOntcIjBcIjp7XCJjXCI6XCIxLTFcIn0sXCIxXCI6e1wiY1wiOlwiMS0yXCJ9fSxcIjFcIjp7XCIwXCI6e1wiY1wiOlwiMi0xXCJ9LFwiMVwiOntcImNcIjpcIjItMlwifX19J10sXG4gICAgICAgICAgICBbJ2EuKi5iJywgJ3tcIjBcIjpbe1wiY1wiOlwiMS0xXCJ9LHtcImNcIjpcIjEtMlwifV0sXCIxXCI6W3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dfSddLFxuICAgICAgICAgICAgWydhLjEuYicsICdbe1wiY1wiOlwiMi0xXCJ9LHtcImNcIjpcIjItMlwifV0nXSxcbiAgICAgICAgICAgIFsnYS4wLmInLCAnW3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgciA9IHBmLmdldFZpYShhKTtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQocik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnYXBpIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBwYXRoZmluZGVyLCBvYmplY3Q7XG5cblxuICAgICAgICBjbGFzcyBBIHtcbiAgICAgICAgICAgIGdldCBhKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIFwidGVzdDFcIiwgZmFsc2UsIHVuZGVmaW5lZCwgcGFyc2VJbnQoXCJhXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBmOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogW1widGVzdDJcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgajoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBrOiAobmV3IE1hcCkuc2V0KCdtJywge246IDN9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGw6IChuZXcgU2V0KS5hZGQoe246IDR9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiOiBuZXcgQVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9iamVjdCk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMTJdLFxuICAgICAgICAgICAgICAgIFt1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFtudWxsXSxcbiAgICAgICAgICAgICAgICBbXCJ0ZXN0XCJdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdHlwZW9mIGE7XG4gICAgICAgICAgICAgICAgaWYgKGEgPT09IG51bGwpIGxhYmVsID0gJ251bGwnO1xuXG5cbiAgICAgICAgICAgICAgICBpdChsYWJlbCArICcgc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGF0aGZpbmRlcihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCcuc2V0VmlhKHgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgcGYsIG9iajtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgb2JqID0ge31cbiAgICAgICAgICAgICAgICBwZiA9IG5ldyBQYXRoZmluZGVyKG9iaik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLjAuMC5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W1t7XCJjXCI6dHJ1ZX1dXX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuMC5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W3tcImNcIjp0cnVlfV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLjMuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOltudWxsLG51bGwsbnVsbCx7XCJjXCI6dHJ1ZX1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOnRydWV9fX0nXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGYuc2V0VmlhKGEsIGIpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmopKS5pcy5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCcuc2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBhO1xuICAgICAgICAgICAgbGV0IGI7XG4gICAgICAgICAgICBsZXQgYztcblxuICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYSA9IFwiYS54XCI7XG4gICAgICAgICAgICAgICAgYiA9IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgIGMgPSBcImEueS5kXCI7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJldHVybiBQYXRoZmluZGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLnNldFZpYShhLCBiKSkuaXMuaW5zdGFuY2VPZihQYXRoZmluZGVyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIGNoYW5nZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGF0aGZpbmRlci5zZXRWaWEoYSwgYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX0sXCJ4XCI6XCJ0cnVlXCJ9LFwiYlwiOnt9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBjICsgJywgJyArIGIgKyAnKSBzaG91bGQgY2hhbmdlIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXRoZmluZGVyLnNldFZpYShjLCBiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fSxcInlcIjp7XCJkXCI6XCJ0cnVlXCJ9fSxcImJcIjp7fX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgZGVzY3JpYmUoJy5leGlzdHMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjEnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2IuYScsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLngnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLngnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIucScsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjAnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmcnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4wJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMicsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgdHJ1ZV0sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5leGlzdHMoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmV4aXN0cyhhKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnLmRlbGV0ZVZpYSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG4gICAgICAgICAgICAgICAgWydhLmIuaicsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCcuZGVsZXRlVmlhKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoZmluZGVyLmRlbGV0ZVZpYShhKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJy5nZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlc2NyaWJlKCcuZ2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIFwidGVzdDFcIiwgZmFsc2UsIHVuZGVmaW5lZCwgcGFyc2VJbnQoXCJhXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IFtcInRlc3QyXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiAobmV3IE1hcCkuc2V0KCdtJywge246IDN9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogKG5ldyBTZXQpLmFkZCh7bjogNH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDEsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMiwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAzLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDQsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogNSwgcjogdHJ1ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHthOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHthOiAyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHthOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHthOiA0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvYmplY3QpO1xuXG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgWydhLionLCAnW1tcImJcIix7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e30sXCJvXCI6W3tcInBcIjp7XCJxXCI6MSxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjoyLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjMsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6NCxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjo1LFwiclwiOnRydWV9fV0sXCJzXCI6e1widFwiOntcImFcIjoxfSxcInVcIjp7XCJhXCI6Mn0sXCJ2XCI6e1wiYVwiOjN9LFwieFwiOntcImFcIjo0fX19XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIucy4qLmEnLCAnW1tcInRcIiwxXSxbXCJ1XCIsMl0sW1widlwiLDNdLFtcInhcIiw0XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIucy4qJywgJ1tbXCJ0XCIse1wiYVwiOjF9XSxbXCJ1XCIse1wiYVwiOjJ9XSxbXCJ2XCIse1wiYVwiOjN9XSxbXCJ4XCIse1wiYVwiOjR9XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAucScsICdbW1wiMFwiLDFdLFtcIjFcIiwyXSxbXCIyXCIsM10sW1wiM1wiLDRdLFtcIjRcIiw1XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAucicsICdbW1wiMFwiLHRydWVdLFtcIjFcIix0cnVlXSxbXCIyXCIsdHJ1ZV0sW1wiM1wiLHRydWVdLFtcIjRcIix0cnVlXV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAnLCAnW1tcIjBcIix7XCJxXCI6MSxcInJcIjp0cnVlfV0sW1wiMVwiLHtcInFcIjoyLFwiclwiOnRydWV9XSxbXCIyXCIse1wicVwiOjMsXCJyXCI6dHJ1ZX1dLFtcIjNcIix7XCJxXCI6NCxcInJcIjp0cnVlfV0sW1wiNFwiLHtcInFcIjo1LFwiclwiOnRydWV9XV0nXVxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmVzdWx0ICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IHBhdGhmaW5kZXIuZ2V0VmlhKGEpXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyKSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnLmdldFZpYSgpIHNob3VsZCByZXN1bHQgJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHAgPSBuZXcgUGF0aGZpbmRlcih7XG4gICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YzogMX0sIHtjOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjOiAxLCBkOiBmYWxzZX0sIHtjOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCByID0gcC5nZXRWaWEoXCIqLnguKi5jXCIpXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtYXBUb09iaihtYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHt9XG4gICAgICAgICAgICAgICAgICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IG1hcFRvT2JqKHYpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IHZcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG1hcFRvT2JqKHIpKSkuaXMuZXF1YWwoJ3tcImFcIjp7XCIwXCI6MSxcIjFcIjoyfSxcImJcIjp7XCIwXCI6MSxcIjFcIjoyfX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLmdldFZpYShhLmIubC4wLm4pIHdpdGggbWFwIHNob3VsZCByZXR1cm4gNCAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZ2V0VmlhKCdhLmIubC4wLm4nKSkuaXMuZXF1YWwoNCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmsubS5uJywgM10sXG4gICAgICAgICAgICAgICAgWydhLmIubC4wLm4nLCA0XSxcbiAgICAgICAgICAgICAgICBbJ2EueCcsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIucScsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4xJywgXCJ0ZXN0MVwiXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjAnLCA0XSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuZycsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4wJywgXCJ0ZXN0MlwiXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgZmFsc2VdLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5nZXRWaWEoYSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuZC5lJ10sXG4gICAgICAgICAgICAgICAgWydhLmIuZC54J10sXG4gICAgICAgICAgICAgICAgWydhLmIubC5lLm4nXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhdGhmaW5kZXIuZ2V0VmlhKGEpKS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BpcGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcblxuXG5kZXNjcmliZSgnUGlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBkaWZmZXJlbnQgcGlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsncGF0aDpiIHwgaWY6eDpcXFxcICcsIHthOiB0cnVlfSwgJyAnXSwgICAvLyAnXFxcXCAnLmxlbmd0aCBcdTIxQTYgMlxuICAgICAgICAgICAgWydwYXRoOmEgfCBpZjp4OlxcXFwgJywge2E6IHRydWV9LCAneCddLFxuICAgICAgICAgICAgWydub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdhYmNkZWZnaGlqa2xtbm9wJ10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1BpcGUucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUoYSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByID0gdC5ydW4oYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCduZXcgUGlwZSBzaG91bGQgY3JlYXRlIG5ldyBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUGlwZSgnJykpLnRvLmJlLmluc3RhbmNlT2YoUGlwZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQaXBlKCdpbmRleDphfHRvdXBwZXIgfHByZWZpeDphJykucnVuKHthOiBcInRlc3RcIn0pKS50by5iZS5lcXVhbCgnYVRFU1QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpbmRleDphfHRvdXBwZXIgfHByZWZpeDphJywge2E6IFwidGVzdFwifSwgJ2FURVNUJ10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMuZCB8IHRvdXBwZXIgfCBwcmVmaXg6SGVsbG9cXFxcICcsIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBcIndvcmxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICdIZWxsbyBXT1JMRCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jfGluZGV4OmR8dG91cHBlciB8c3VmZml4OngnLCB7YToge2I6IHtjOiB7ZDogXCJ0ZXN0XCJ9fX19LCAnVEVTVHgnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBQaXBlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKGIpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFBpcGUgYW5kIGxvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGxldCBodG1sMSA9IGBcbjxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcIjUxXCI6IFwieHl6XCIsXG4gICAgICAgIFwiNTJcIjogXCJhYmNcIixcbiAgICAgICAgXCI1M1wiOiBcImRlZlwiXG4gICAgfVxuPC9zY3JpcHQ+ICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydwYXRoOnN0YXR1cyB8IHRvc3RyaW5nIHwgaTE4bicsIHtzdGF0dXM6IDUxfSwgXCJ4eXpcIl1cblxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgcGlwZSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IG9iaiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtKCcgKyBwaXBlICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShvYmopICsgJykgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShleHBlY3RlZCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKHBpcGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihvYmopKS50by5iZS5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmNsYXNzIE1vY2tGb3JFeHRlbmRzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ2V4dGVuZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1xuICAgICAgICAgICAne1widGhla2V5XCI6e319Jyx7fSx7dGhla2V5Om5ldyBNb2NrRm9yRXh0ZW5kc30gXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOltdfX0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiM1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLCAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6MSxcImRcIjoxfX0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjoxLFwiZFwiOntcInhcIjpbXCJjYXJcIl0sXCJmXCI6dHJ1ZSxcImdcIjpbXX19fScsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDEsXG4gICAgICAgICAgICAgICAgICAgIGQ6IHt4OiBbXCJjYXJcIl19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnOiBbXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGEgPSBkYXRhXG5cbiAgICAgICAgaXQoJy5leHRlbmQoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHggPSBleHRlbmQuYXBwbHkodGhpcywgYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLmlzLmVxdWFsKGQpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIFtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMSxcbiAgICAgICAgICAgICAgICAgICAgZDogW1wiY2FyXCJdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnOiBbXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YVxuXG4gICAgICAgIGl0KCcuZXh0ZW5kKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kLmFwcGx5KHRoaXMsIGEpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSlcblxuXG5cbmRlc2NyaWJlKCdleHRlbmQgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRlbmQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBmcm9tIGFub3RoZXIgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IDEgfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBiOiAyIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiAxLCBiOiAyIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3Igbm9uLW9iamVjdCB0YXJnZXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYjogMiB9O1xuICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kKHRhcmdldCwgc291cmNlKSkudG8udGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG5vbi1vYmplY3Qgc291cmNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IDEgfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gXCJub3QgYW4gb2JqZWN0XCI7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpKS50by50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVlcCBvYmplY3QgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IHsgYjogMSB9IH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYTogeyBjOiAyIH0sIGQ6IDMgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IHsgYjogMSwgYzogMiB9LCBkOiAzIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXJyYXkgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IFsxLCAyXSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGE6IFszLCA0XSB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogWzMsIDRdIH0pO1xuICAgIH0pO1xufSk7XG5cblxuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgYWJzdHJhY3QgY29uc3RyYWludCBkZWZpbmVzIHRoZSBhcGkgZm9yIGFsbCBjb25zdHJhaW50cy4gbWFpbmx5IHRoZSBtZXRob2QgaXNWYWxpZCgpIGlzIGRlZmluZWQuXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaXNWYWxpZCgpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29uc3RyYWludHNcbiAqIEBzdW1tYXJ5IFRoZSBhYnN0cmFjdCBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LWNvbnN0cmFpbnRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSW52YWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgaW52YWxpZCBjb25zdHJhaW50IGFsbG93cyBhbiBhbHdheXMgaW52YWxpZCBxdWVyeSB0byBiZSBwZXJmb3JtZWQuIHRoaXMgY29uc3RyYWludCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgaW52YWxpZFxuICovXG5jbGFzcyBJbnZhbGlkIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHJlamVjdGVkIHByb21pc2Vcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvaW52YWxpZFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0ludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlzdmFsaWQgPSBuZXcgSW52YWxpZCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaXN2YWxpZC5pc1ZhbGlkKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge0Fic3RyYWN0T3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludE1vY2sgZXh0ZW5kcyBCYXNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGlzVmFsaWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ0Fic3RyYWN0T3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBBYnN0cmFjdE9wZXJhdG9yKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG5vdCBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBBYnN0cmFjdE9wZXJhdG9yKG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCksIG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCkpICAgIFxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgXG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogT3BlcmF0b3JzIGFsbG93IHlvdSB0byBsaW5rIGNvbnN0cmFpbnRzIHRvZ2V0aGVyLiBmb3IgZXhhbXBsZSwgeW91IGNhbiBjaGVjayB3aGV0aGVyIGEgdmFsdWUgaXNcbiAqIGFuIG9iamVjdCBvciBhbiBhcnJheS4gZWFjaCBvcGVyYXRvciBoYXMgdHdvIG9wZXJhbmRzIHRoYXQgYXJlIGxpbmtlZCB0b2dldGhlci5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3Qgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7QWJzdHJhY3RDb25zdHJhaW50fSBvcGVyYW50QVxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEJcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSBcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCJcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wZXJhbnRBLCBvcGVyYW50Qikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRvcGVyYW50QSBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludCAmJlxuXHRcdFx0XHRvcGVyYW50QiBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub3BlcmFudEEgPSBvcGVyYW50QTtcblx0XHR0aGlzLm9wZXJhbnRCID0gb3BlcmFudEI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hYnN0cmFjdC1vcGVyYXRvclwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBWYWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgdmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIHZhbGlkIHF1ZXJ5IHRvIGJlIHBlcmZvcm1lZC4gdGhpcyBjb25zdHJhaW50IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvdmFsaWQubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgdmFsaWRcbiAqL1xuY2xhc3MgVmFsaWQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvdmFsaWRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfSBmcm9tIFwiLi9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT3JPcGVyYXRvciB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgT3JPcGVyYXRvciBpcyB1c2VkIHRvIGxpbmsgc2V2ZXJhbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnQgaXMgZnVsZmlsbGVkIGlmIG9uZSBvZiB0aGUgY29uc3RyYWludHMgaXMgZnVsZmlsbGVkLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBvciBvcGVyYXRvclxuICovXG5jbGFzcyBPck9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RPcGVyYXRvciB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGxldCBhO1xuXHRcdFx0bGV0IGI7XG5cblx0XHRcdHNlbGYub3BlcmFudEFcblx0XHRcdFx0LmlzVmFsaWQodmFsdWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YSA9IGZhbHNlO1xuXHRcdFx0XHRcdC8qKiBiIGhhcyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkIGFuZCB3YXMgbm90IHRydWUgKi9cblx0XHRcdFx0XHRpZiAoYiA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub3BlcmFudEJcblx0XHRcdFx0LmlzVmFsaWQodmFsdWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YiA9IGZhbHNlO1xuXHRcdFx0XHRcdC8qKiBiIGhhcyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkIGFuZCB3YXMgbm90IHRydWUgKi9cblx0XHRcdFx0XHRpZiAoYSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9vci1vcGVyYXRvclwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7VmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzXCI7XG5pbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7T3JPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnT3JPcGVyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgSW52YWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjb25zdHJhaW50LmlzVmFsaWQoKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgT3JPcGVyYXRvcihhLCBiKTtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUoKSA6IGRvbmUobmV3IEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUobmV3IEVycm9yKCkpIDogZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IElzT2JqZWN0IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9pc29iamVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29uc3RyYWludHNcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdFxuICovXG5jbGFzcyBJc09iamVjdCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnQvaXMtb2JqZWN0XCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtJc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJc09iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBJc09iamVjdCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKHt9KS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5hKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9IGZyb20gXCIuL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBbmRPcGVyYXRvciB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgQW5kT3BlcmF0b3IgaXMgdXNlZCB0byBsaW5rIHNldmVyYWwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50IGlzIGZ1bGZpbGxlZCBpZiBhbGwgY29uc3RyYWludHMgb2YgdGhlIG9wZXJhdG9ycyBhcmUgZnVsZmlsbGVkLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29uc3RyYWludHNcbiAqIEBzdW1tYXJ5IEEgYW5kIG9wZXJhdG9yIGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQW5kT3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdE9wZXJhdG9yIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0dGhpcy5vcGVyYW50QS5pc1ZhbGlkKHZhbHVlKSxcblx0XHRcdHRoaXMub3BlcmFudEIuaXNWYWxpZCh2YWx1ZSksXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hbmQtb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge0FuZE9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnQW5kT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBWYWxpZCgpLCBmYWxzZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjb25zdHJhaW50LmlzVmFsaWQoKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgQW5kT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IElzQXJyYXkgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBhcnJheVxuICovXG5jbGFzcyBJc0FycmF5IGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLWFycmF5XCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtJc0FycmF5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNBcnJheScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBJc0FycmF5KClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoWzEsMiwzXSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnYXJyYXknKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7VmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgVmFsaWQoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Tm9kZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuZGVzY3JpYmUoJ05vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCcjY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGFuIGVtcHR5IE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGEgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgbGV0IG5vZGVMaXN0MiA9IG5ldyBOb2RlTGlzdChub2RlTGlzdCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdDIuc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcbiAgICBcbiAgICAgXG4gICAgaXQoJ2NyZWF0ZSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpKS5pcy5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2FkZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ3JlbW92ZSBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkucmVtb3ZlKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyB1bmtub3duIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5oYXMobmV3IE5vZGUpKS50by5iZS5mYWxzZTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyBhZGRlZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuID0gbmV3IE5vZGU7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobikuaGFzKG4pKS50by5iZS50cnVlO1xuICAgIH0pXG4gICAgXG4gICAgaXQoJ3RvU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuID0gbmV3IE5vZGU7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoJ2EnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnYicpKSkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoJ2FcXG4gXHUyNTE0YicpO1xuICAgIH0pXG5cbiAgICBpdCgndGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVMaXN0KCkuYWRkKDEpKS50by50aHJvdyhFcnJvcik7XG4gICAgfSlcblxuXG59KTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7aW5zdGFuY2VTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuXG5cblxuY2xhc3MgQmFzZURpZmZlcmVudFJlYWxtIGV4dGVuZHMgT2JqZWN0IHtcbiAgICBcblxuICAgIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gICAgfVxuXG5cbn1cblxuY2xhc3MgU3ViY2xhc3MgZXh0ZW5kcyBCYXNlRGlmZmVyZW50UmVhbG0ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9zdWJjbGFzc1wiKTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKCdCYXNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBCYXNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKEJhc2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKE9iamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnaW5zdGFuY29mJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKEJhc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzdWJjbGFzcyBpbnN0YW5jZW9mJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAobmV3IFN1YmNsYXNzIGluc3RhbmNlb2YgQmFzZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0cnVlKS50by5iZS50cnVlO1xuICAgICAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZhbHNlKS50by5iZS50cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL21lZGlhdHlwZS5tanNcIjtcblxuZGVzY3JpYmUoJ0RhdGF1cmwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFtcIiovKlwiLFwiKlwiLCcqJ10sXG4gICAgICAgIFtcInRleHQvKlwiLFwidGV4dFwiLCcqJ10sXG4gICAgICAgIFtcIiovdGVzdFwiLFwiKlwiLCd0ZXN0J10sXG4gICAgICAgIFtcImltYWdlL3BuZ1wiLCBcImltYWdlXCIsIFwicG5nXCJdLFxuICAgICAgICBbXCJhdWRpby9tcDNcIiwgXCJhdWRpb1wiLCBcIm1wM1wiXSxcbiAgICAgICAgW1widmlkZW8vbXBlZ1wiLCBcInZpZGVvXCIsIFwibXBlZ1wiXSxcbiAgICAgICAgW1widGV4dC9wbGFpblwiLCBcInRleHRcIiwgXCJwbGFpblwiXSxcbiAgICAgICAgW1widGV4dC9odG1sXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0PVVTLUFTQ0lJXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0PVxcXCJVUy1BU0NJSVxcXCJcIiwgXCJ0ZXh0XCIsIFwiaHRtbFwiXSxcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgncGFyc2VNZWRpYVR5cGUoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcnNlTWVkaWFUeXBlKGEpO1xuXG4gICAgICAgICAgICBleHBlY3QoZCkuaXMuaW5zdGFuY2VvZihNZWRpYVR5cGUpO1xuICAgICAgICAgICAgZXhwZWN0KGQudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoZC50eXBlKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnN1YnR5cGUpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgZXhwZWN0KGQucGFyYW1ldGVyKS5pcy5pbnN0YW5jZW9mKE1hcClcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgW1xuICAgICAgICBbXCJ2aWRlby9cIl0sXG4gICAgICAgIFtcInRleHRcIl0sXG4gICAgICAgIFtcIi9tcDNcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0VVMtQVNDSUlcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0XFxcIlVTLUFTQ0lJXFxcIlwiXSxcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJycgKyBhICsgJyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoKCk9PntwYXJzZU1lZGlhVHlwZShhKX0pLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUb2tlbkxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB0b2tlbkxpc3QgPSBuZXcgVG9rZW5MaXN0KClcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRva2VuTGlzdC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzZXQgYW5kIHJlbW92ZSByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnaW5pdCB3aXRoIHN0cmluZyBpdGVyYWJsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdG9rZW5zID0gW1wiYWJjXCIsIFwiZGVmXCIsIFwiZ2hpXCJdXG4gICAgICAgICAgICBsZXQgbGlzdCA9IG5ldyBUb2tlbkxpc3QodG9rZW5zKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwiYWJjIGRlZiBnaGlcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB3aXRoIGl0ZXJhYmxlIHdpdGhvdXQgc3RyaW5nIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCA0LCBcImdoaVwiXVxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUb2tlbkxpc3QodG9rZW5zKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpbml0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBjdXJyZW50LCBleHBlY3RlZCwgdHlwZXJyb3JcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3QxXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDEgdGVzdDInLCBcInRlc3QxIHRlc3QyXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIFwiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCB0cnVlXSwgLy8gTmFOXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW1tcIjFcIiwgXCIyXCIsIFwiM1wiXSwgJzEgMiAzJywgZmFsc2VdLCAvLyBpdGVyYWJsZSBzdHJpbmdzXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCcgKyB0eXBlb2YgYSArICcpIHRocm93IFR5cGVFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KGEpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2l0ZXJhdG9yIHByb3RvY29sJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0O1xuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmdldEl0ZXJhdG9yKCkpLnRvLmJlLmFuKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgICAgICBleHBlY3QoWy4uLmxpc3RdKS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmVudHJpZXMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5lbnRyaWVzKCkpLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmVudHJpZXMoKSBzaG91bGQgcmV0dXJuIEFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBlbmRcIikuZW50cmllcygpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QpLnRvLmJlLmFuKCdhcnJheScpLnRvLmluY2x1ZGUoJ3N0YXJ0JykudG8uaW5jbHVkZSgnZW5kJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZm9yRWFjaCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0O1xuICAgICAgICBpdCgnLmZvckVhY2goKSBzaG91bGQgaXRlcmF0ZSBvdmVyIHRva2VubGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwiYWFhIGJiYiBjY2MgZGRkIGVlZSBmZmZcIik7XG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCIhXCIgKyBhICsgXCIhXCI7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLmFuKCdzdHJpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuZXF1YWwoXCIhYWFhISFiYmIhIWNjYyEhZGRkISFlZWUhIWZmZiFcIilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29udGFpbnMgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbGlzdFxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ3N0YXJ0JykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygnbWlkZGxlJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygnZW5kJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnXSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0LCBtaWRkbGUgZW5kKSBzaG91bGQgbm90IGNvbnRhaW4geHl6JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ3h5eicpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKFsnZW5kJywgJ3N0YXJ0JywgJ21pZGRsZScsICd4eXonXSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHVuZGVmaW5lZCBudWxsIE5hTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHVuZGVmaW5lZCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMocGFyc2VJbnQoXCJhXCIpKSkudG8uYmUuZmFsc2U7IC8vIE5hTlxuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMobnVsbCkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCd0b2dnbGUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbGlzdFxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobmV3LXZhbHVlKSBzaG91bGQgY29udGFpbiBuZXctdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b2dnbGUoJ25ldy12YWx1ZScpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgbWlkZGxlIGVuZCBuZXctdmFsdWVcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0IG1pZGRsZSBlbmQpLnRvZ2dsZShtaWRkbGUpIHNob3VsZCBub3QgY29udGFpbiBtaWRkbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b2dnbGUoJ21pZGRsZScpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgpLnRvZ2dsZSgpIHNob3VsZCAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChcImFiYyBkZWYgZ2hpXCIpLnRvZ2dsZShcImRlZiB4eXpcIikudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJhYmMgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoW1wiYWJjXCIsIFwieHl6XCJdKS50b1N0cmluZygpKS50by5lcXVhbChcImRlZiBnaGkgeHl6XCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgpLnRvZ2dsZSgpIHNob3VsZCAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChcImFiYyBkZWYgZ2hpXCIpLnRvZ2dsZSh1bmRlZmluZWQpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGRlZiBnaGlcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdtYW5pcHVsYXRlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdFxuXG4gICAgICAgIGl0KCdyZXN1bHQgVG9rZW5MaXN0KFwiJyArIFwic3RhcnRcIiArICdcIikgc2hvdWxkIGJlIFwiJyArIFwic3RhcnRcIiArICdcIicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0XCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmQgdGhpcmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFwic2Vjb25kIHRoaXJkXCIpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJbc2Vjb25kLHRoaXJkXVwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmQgdGhpcmRcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJy5jbGVhcigpLnRvU3RyaW5nKCkgc2hvdWxkIFwiXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkuY2xlYXIoKS50b1N0cmluZygpKS5pcy5lcXVhbChcIlwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVtb3ZlKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikpLnRvLmJlLmFuLmluc3RhbmNlb2YoVG9rZW5MaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHRoaXJkIGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShcInNlY29uZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHRoaXJkIGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmQgdGhpcmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJbc2Vjb25kLHRoaXJkXVwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFtcInNlY29uZFwiLCBcInRoaXJkXCJdKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlcGxhY2Uoc2Vjb25kLCB4eXopLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHh5eiB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZXBsYWNlKFwic2Vjb25kXCIsIFwieHl6XCIpKS50by5iZS5pbnN0YW5jZU9mKFRva2VuTGlzdCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHh5eiB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKGVuZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmQgdGhpcmQgeHl6XCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcImVuZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmQgdGhpcmQgeHl6XCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2lzT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG4gICAgICAgICAgICBleHRlbmQoby5nZXRTdWJqZWN0KCksIHthOiA0fSk7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2E6IDR9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0U3ViamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb2JzZXJ2ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7YTogMX0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxfSk7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBvLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBvbmUgY2hhbmdlIGFzIG5vdGlmeSBydW5zIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9uZShcImNhbGxlZCBmb3IgZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYyA9IDQ7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2E6IDEsIGM6IDR9KTtcblxuICAgICAgICAgICAgby5zZXRTdWJqZWN0KHtiOiAyfSk7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2I6IDJ9KTtcblxuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuZCA9IDU7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2I6IDIsIGQ6IDV9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG4gICAgICAgICAgICBleHBlY3QobykuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJveHkgb2JqZWN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ1Byb3h5IG9iamVjdHMgc2hvdWxkIG5vdCBiZSByZWNvbW1pdHRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IHtiOiB0cnVlfX0pO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iID0gby5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICBvLmdldFN1YmplY3QoKS5hLmIuYS5iID0gZmFsc2U7XG4gICAgICAgICAgICAvL2V4cGVjdChvLmdldFN1YmplY3QoKT09PXAuZ2V0U3ViamVjdCgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdub3RpZnkgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5mb3JtIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIC8vIHRoZSBtZXRob2QgaXMgY2FsbGVkIHR3aWNlLCBvbmNlIGZvciBkZWZpbmVQcm9wZXJ0eSBhbmQgZm9yIHNldCB0cmFwXG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwidGhpcyBpcyBub3QgUHJveHlPYnNlcnZlclwiKSlcbiAgICAgICAgICAgIH0sIHRydWUpXG5cbiAgICAgICAgICAgIGxldCByZWFsU3ViamVjdCA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZDogNVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHAgPSBuZXcgUHJveHlPYnNlcnZlcihyZWFsU3ViamVjdCk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcbiAgICAgICAgICAgIGV4cGVjdChwLmF0dGFjaE9ic2VydmVyKG8pKS5pcy5pbnN0YW5jZU9mKFByb3h5T2JzZXJ2ZXIpO1xuXG4gICAgICAgICAgICBsZXQgcyA9IHAuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgbGV0IHIgPSBwLmdldFJlYWxTdWJqZWN0KCk7XG5cbiAgICAgICAgICAgIHMuYS5kID0gZmFsc2U7XG4gICAgICAgICAgICBzLmEuYi5kID0gMjtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvNDNcbiAgICAgKi9cbiAgICBkZXNjcmliZSgnUmVmbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnY2hlY2sgUmVmbGVjdC5zZXQoKSB3aXRoIFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcjtcblxuICAgICAgICAgICAgY29uc3Qgb2JqID0gKG5ldyBQcm94eU9ic2VydmVyKHt9KSkuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJ5ZXMhXCIsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwibm9cIlxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialsnZGF0YSddID0gdmFsdWVcbiAgICAgICAgICAgICAgICB9KS50by5ub3QudGhyb3coKTtcbiAgICAgICAgICAgICAgICAvL3IgPSBSZWZsZWN0LnNldChvYmosICdkYXRhJywgdmFsdWUpXG4gICAgICAgICAgICAgICAgLy9leHBlY3QocikudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGhhdCcsIHt0aGF0OiAnY2hlY2tlZDEnfV0sXG4gICAgICAgICAgICBbJ3RoYXQnLCBuZXcgUHJveHkoe3RoYXQ6ICdjaGVja2VkMid9LCB7fSldLFxuICAgICAgICAgICAgWyd0aGF0JywgKG5ldyBQcm94eU9ic2VydmVyKHt0aGF0OiAnY2hlY2tlZDMnfSkpLmdldFJlYWxTdWJqZWN0KCldLFxuICAgICAgICAgICAgWyd0aGF0JywgKG5ldyBQcm94eU9ic2VydmVyKHt0aGF0OiAnY2hlY2tlZDQnfSkpLmdldFN1YmplY3QoKV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCcgKyBrZXkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeSh0YXJnZXQpICsgJykgc2hvdWxkIHdyaXRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIGtleSlbJ3dyaXRhYmxlJ10sICd3cml0YWJsZSBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdmFsdWUpLCAnc2V0IGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyIHdpdGggY2hhbmdlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb3JpZ2luYWwsIG9ic2VydmVyLCBwcm94eTtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb3JpZ2luYWwgPSB7fTtcbiAgICAgICAgICAgIHByb3h5ID0gbmV3IFByb3h5T2JzZXJ2ZXIob3JpZ2luYWwpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnYScsIDQsIEpTT04uc3RyaW5naWZ5KHthOiA0fSldLFxuICAgICAgICAgICAgWydiJywgOSwgSlNPTi5zdHJpbmdpZnkoe2E6IDQsIGI6IDl9KV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3NldCBrZXkgJyArIGEgKyAnIHZhbHVlICcgKyBiICsgJyBleHBlY3QgJyArIGMsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlYWxTdWJqZWN0KCkpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHByb3h5LmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKVxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gcHJveHkuZ2V0U3ViamVjdCgpXG5cbiAgICAgICAgICAgICAgICBzdWJqZWN0W2FdID0gYjtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBwcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgIGV4cGVjdChwcm94eS5ub3RpZnlPYnNlcnZlcnMoKSkuaXMuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pXG5cbiIsICJpbXBvcnQge1xuICAgIFZlcnNpb25cbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdWZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5jb21wYXJlVG8oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzEuMi4zJywgJzEuMi4zJywgMF0sXG4gICAgICAgICAgICBbJzEuMi4yJywgJzEuMi4zJywgLTFdLFxuICAgICAgICAgICAgWycyJywgJzIuMC4wJywgMF0sXG4gICAgICAgICAgICBbJzEuMi40JywgJzEuMi4zJywgMV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGMgKyAnIHdoZW4gdGhlIHZhbHVlICcgKyBhICsgJyBpcyAnICsgYiArICcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBWZXJzaW9uKGEpLmNvbXBhcmVUbyhiKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzEuMS4xJywgJzIuMycsIDMsICcxLjIuMyddLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDUsICcxLjEuNSddXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhLCBiLCBjKS50b1N0cmluZygpKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG59KTtcblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QsIGdldEdsb2JhbEZ1bmN0aW9ufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSB0eXBlb2YgZ2V0R2xvYmFsKCk7XG4gICAgICAgICAgICBleHBlY3QodCkudG8uYmUuZXF1YWwoJ29iamVjdCcpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbEZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGdsb2JhbCBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdmdW5jdGlvbicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSB0eXBlb2YgZ2V0R2xvYmFsT2JqZWN0KCdKU09OJyk7XG4gICAgICAgICAgICBleHBlY3QodCkudG8uYmUuZXF1YWwoJ29iamVjdCcpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgImltcG9ydCB7T2JzZXJ2ZXJMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVybGlzdC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnT2JzZXJ2ZXJMaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5hdHRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuYXR0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmRldGFjaCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXJMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG9ic2VydmVyTGlzdC5kZXRhY2gobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuaW5zdGFuY2VPZihPYnNlcnZlckxpc3QpXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcubm90aWZ5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0VmFsdWUgPSBcIlllcyFcIjtcbiAgICAgICAgbGV0IG87XG4gICAgICAgIGxldCBvYnNlcnZlckxpc3Q7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0VmFsdWVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobylcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlb2YgUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3Qubm90aWZ5KHt9KSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgcmVzdWx0VmFsdWUsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fVxuXG4gICAgICAgICAgICBvYnNlcnZlckxpc3Qubm90aWZ5KG9iaikudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pbmNsdWRlcyhyZXN1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuY29udGFpbnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbzEgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG8yID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgY29udGFpbiBvMSBhbmQgbzInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG5cbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb250YWluIG8yIGFuZCBub3QgbzEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8yKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMSBhbmQgbm90IG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMSlcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbzEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8yKS5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXF1aXBXaXRoSW50ZXJuYWx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaW50ZXJuYWwubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MxIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGRvaXQoKSB7XG4gICAgICAgIHJldHVybiBcImRvbmVcIjtcbiAgICB9XG59XG5cbmNsYXNzIFNvbWVSYW5kb21DbGFzczIgZXh0ZW5kcyBPYmplY3Qge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRJbnRlcm5hbCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlc3Q6IFwidGVzdFwiXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZGVzY3JpYmUoJ0Jhc2UgaW5qZWN0IHdpdGggb3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgU29tZVJhbmRvbUNsYXNzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MyKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MxKTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIFNvbWVSYW5kb21DbGFzczInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczEpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczEpLm5vdC50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRXh0ZW5kcyBTb21lUmFuZG9tQ2xhc3Mgd2l0aCBpbnRlcm5hbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2F0dGFjaCBhbmQgbm90aWZ5IGludGVybmFsIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGMuYXR0YWNoSW50ZXJuYWxPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ0ZXN0XCIpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIHJlbW92ZSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcblxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGMuYXR0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgYy5kZXRhY2hJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcikpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZ2V0SW50ZXJuYWwgYW5kIHNldEludGVybmFsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGV4cGVjdChjLnNldEludGVybmFsKFwidGVzdFwiLCBcInllYWhcIikpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieWVhaFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdCB2YWx1ZXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdENsYXNzID0gY2xhc3MgZXh0ZW5kcyBPYmplY3Qge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDogXCJ4eXpcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgdGVzdENsYXNzO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIiwgXCJhYmNcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImRlYWwgd2l0aCBkZWZhdWx0cyBmcm9tIGRlZmF1bHRzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVzdENsYXNzMiA9IGNsYXNzIGV4dGVuZHMgdGVzdENsYXNzIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmludGVybmFsRGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QyOiBcImFiY1wiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieHl6XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJhYmNcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoXCJzZXQgbXVsdGlwbGUgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGV4cGVjdChjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDogXCJ5ZWFoXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDJcIlxuICAgICAgICAgICAgfSkpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieWVhaFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwieWVhaDJcIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWxzKHtcbiAgICAgICAgICAgICAgICB0ZXN0MjogXCJ5ZWFoMi1uZXdcIixcbiAgICAgICAgICAgICAgICB0ZXN0MzogXCJ5ZWFoM1wiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyLW5ld1wiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDNcIikpLnRvLmJlLmVxdWFsKFwieWVhaDNcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7T2JzZXJ2YWJsZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdPYnNlcnZhYmxlUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ09ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90aWZ5JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBxdWV1ZSA9IG5ldyBPYnNlcnZhYmxlUXVldWU7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBPYnNlcnZlcigocSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxdWV1ZS5hdHRhY2hPYnNlcnZlcihvKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihPYnNlcnZhYmxlUXVldWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VEYXRhVVJMfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIgZGF0YTp0ZXh0L2h0bWwsJTNDaDElM0VIZWxsbyUyQyUyMFdvcmxkISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVTLUFTQ0lJLCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6LEElMjBicmllZiUyMG5vdGVcIiwgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLEElMjBicmllZiUyMG5vdGUnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvJTJDJTIwV29ybGQhXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxIZWxsbyUyQyUyMFdvcmxkISddLFxuICAgICAgICBbXCIgICBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQUlCQU1BQUFBMklhTzRBQUFBRlZCTVZFWGs1T1RuNStmdDdlMzE5ZlgyOXZiNStmbi8vLysrR1VtVkFBQUFMVWxFUVZRSUhXTklDbllMWm5BTFRncG1NR1lJRldZSVpUQTJaRkF6VFRGbFNERlZNd1Z5UWhtQXdzWU1BS0RhQnkwYXhYL2lBQUFBQUVsRlRrU3VRbUNDICAgXCJdLFxuICAgICAgICBbXCIgZGF0YTosSGVsbG8gV29ybGQhXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxIZWxsbyUyMFdvcmxkISddLFxuICAgICAgICBbXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQUlCQU1BQUFBMklhTzRBQUFBRlZCTVZFWGs1T1RuNStmdDdlMzE5ZlgyOXZiNStmbi8vLysrR1VtVkFBQUFMVWxFUVZRSUhXTklDbllMWm5BTFRncG1NR1lJRldZSVpUQTJaRkF6VFRGbFNERlZNd1Z5UWhtQXdzWU1BS0RhQnkwYXhYL2lBQUFBQUVsRlRrU3VRbUNDXCJdLFxuICAgICAgICBbXCIgZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxTR1ZzYkc4c0lGZHZjbXhrSVElM0QlM0RcIl1cblxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSBiID0gYS50cmltKCk7XG5cblxuICAgICAgICBpdCgncGFyc2VEYXRhVVJMKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdChwYXJzZURhdGFVUkwoYSkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1wiZGF0YXhiYXNlNjRcIl0sXG4gICAgICAgIFtcImRhdGE6SGVsbG9Xb3JsZFwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD0sJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldCwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCIsIFwiZGF0YTpiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFBUU1BQUFBbFBXMGlBQUFBQmxCTVZFVUFBQUQvLy8rbDJaL2RBQUFBTTBsRVFWUjRuR1A0LzUvaC8xK0cvNThaRHJBejNEL01jSDh5dzgzTkREZU5HZTRVZzlDOXp3ejNnVkxNREEvQTZQOS9BRkdHRnlqT1hadFFBQUFBQUVsRlRrU3VRbUNDXCJdLFxuICAgICAgICBbXCJcIl0sXG4gICAgICAgIFtcImh0dHA6Ly93aWtpcGVkaWEub3JnXCJdLFxuICAgICAgICBbXCJiYXNlNjRcIl0sXG4gICAgICAgIFtcImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXhjZXB0aW9uIHBhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcGFyc2VEYXRhVVJMKGEpKS50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyB0b0JpbmFyeSwgZnJvbUJpbmFyeSB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy50b0JpbmFyeSgpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluYXJ5XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiB0b0JpbmFyeShzdHJpbmcpIHtcblx0Y29uc3QgY29kZVVuaXRzID0gbmV3IFVpbnQxNkFycmF5KHZhbGlkYXRlU3RyaW5nKHN0cmluZykubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlVW5pdHMubGVuZ3RoOyBpKyspIHtcblx0XHRjb2RlVW5pdHNbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblx0fVxuXG5cdGNvbnN0IGNoYXJDb2RlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVVbml0cy5idWZmZXIpO1xuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5ieXRlTGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZXNbaV0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuZnJvbUJpbmFyeSgpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluYXJ5XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiBmcm9tQmluYXJ5KGJpbmFyeSkge1xuXHRjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbGlkYXRlU3RyaW5nKGJpbmFyeSkubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG5cdH1cblx0Y29uc3QgY2hhckNvZGVzID0gbmV3IFVpbnQxNkFycmF5KGJ5dGVzLmJ1ZmZlcik7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2Rlc1tpXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2Zyb21CaW5hcnksIHRvQmluYXJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanNcIjtcblxuZGVzY3JpYmUoJ0JpbmFyeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgWydhJywgJ2FcXHUwMDAwJ10sXG4gICAgICAgIFsnXHUyNjM5JywgJzkmJ10sXG4gICAgICAgIFsnSVx1MDBGMXRcdTAwRUJyblx1MDBFMnRpXHUwMEY0blx1MDBFMGxpelx1MDBFNnRpXHUwMEY4bicsICdJXFx1MDAwMFx1MDBGMVxcdTAwMDB0XFx1MDAwMFx1MDBFQlxcdTAwMDByXFx1MDAwMG5cXHUwMDAwXHUwMEUyXFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjRcXHUwMDAwblxcdTAwMDBcdTAwRTBcXHUwMDAwbFxcdTAwMDBpXFx1MDAwMHpcXHUwMDAwXHUwMEU2XFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjhcXHUwMDAwblxcdTAwMDAnXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZnJvbUJpbmFyeSh0b0JpbmFyeSgnICsgYSArICcpKSBzaG91bGQgd29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gdG9CaW5hcnkoYSk7XG4gICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZnJvbUJpbmFyeShyKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcblxuICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgIGRlc2NyaWJlKCcuYWRkVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MSddLFxuICAgICAgICAgICAgWyd0ZXN0MiddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2FkZFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXIuYWRkVGFnKGEpKS5pcy5pbnN0YW5jZU9mKE9ic2VydmVyKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJlbW92ZVRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdyZW1vdmVUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLnJlbW92ZVRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5oYXNUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0NCcsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuaGFzdFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmIChiID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmhhc1RhZyhhKSkuaXMuYmUuZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudXBkYXRlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHt9XG4gICAgICAgIGl0KCdvYnNlcnZlci51cGRhdGUoJyArIG9iaiArICcpIGlzICcgKyAxICsgMyArIDYsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjXG4gICAgICAgICAgICB9LCAxLCAzLCA2KVxuXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKGEgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS5pcy5lcXVhbCgxICsgMyArIDYpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGZ1bmN0aW9uIC51cGRhdGUoKSBzZXZlcmFsIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopLnRoZW4oXyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5nZXRUYWdzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDInLCAndGVzdDMnLCAndGVzdDQnXSwgNF0sXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MycsICd0ZXN0NCddLCAzXSwgLy8gZG91YmxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MScsICd0ZXN0NCddLCAyXSwgLy8gbXVsdGlwbGUgdGVzdDEgKHNldCBpcyB1bmlxdWV1ZSlcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gYS5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYVtpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgaXMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkpLnRvLmJlLmFuKCdhcnJheScpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmdldFRhZ3MoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgXCIgdGFnc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkubGVuZ3RoKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZXNjYXBlU3RyaW5nIH07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBwcmVmaXhlcyBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGFwcGVhciBpbiBhIHJlZ2V4IHdpdGggYSBzbGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcodmFsdWUpIHtcblx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHZhbHVlKVxuXHRcdC5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgXCJcXFxcJCZcIilcblx0XHQucmVwbGFjZSgvLS9nLCBcIlxcXFx4MmRcIik7XG59XG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtlc2NhcGVTdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnZXNjYXBlU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBcbiAgICBbXG4gICAgICAgIFsndGVzdDEnLCAndGVzdDEnXSxcbiAgICAgICAgWyckeycsICdcXFxcJFxcXFx7J10sXG4gICAgICAgIFsnaTE4bnsnLCAnaTE4blxcXFx7J10sXG4gICAgICAgIFsnLy8nLCAnLy8nXSxcbiAgICAgICAgWydcXFxcJywgJ1xcXFxcXFxcJ10sXG4gICAgICAgXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZXNjYXBlU3RyaW5nKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGVzY2FwZVN0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnUmFuZG9tSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBSYW5kb21JRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBSYW5kb21JRCA9IG0uUmFuZG9tSUQ7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IFJhbmRvbUlEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IElEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMScpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQyJylcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDMnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdVVUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgVVVJRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIFxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBVVUlEID0gbS5VVUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuICAgICAgICBcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkuaXMuZXF1YWwoMzYpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd0ZXN0IGZvcm1hdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4RXhwID0gL15bQS1GXFxkXXs4fS1bQS1GXFxkXXs0fS00W0EtRlxcZF17M30tWzg5QUJdW0EtRlxcZF17M30tW0EtRlxcZF17MTJ9JC9pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSBuZXcgVVVJRCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHJlZ2V4RXhwLnRlc3QodSk7XG5cbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdubyB1dWlkICcgKyB1ICsgJyA9PiAnICsgcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7XG4gICAgaXNQcmltaXRpdmUsXG4gICAgaXNCb29sZWFuLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzQXJyYXksXG4gICAgaXNJbnN0YW5jZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSXRlcmFibGUsXG4gICAgaXNJbnRlZ2VyLFxuICAgIGlzU3ltYm9sXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaXMubWpzXCI7XG5cblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNQcmltaXRpdmUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcuaXNTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N5bWJvbChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0ludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0ludGVnZXIoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0l0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSXRlcmFibGUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0Jvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Jvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0Jvb2xlYW4oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1N0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzU3RyaW5nKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgSUQsICB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgKCk9Pnt9LCAgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyB0eXBlb2YgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNPYmplY3QoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc09iamVjdChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcuaXNBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0FycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNBcnJheShhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNGdW5jdGlvbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHRydWVdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Z1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNGdW5jdGlvbihhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIHZhbGlkYXRlUHJpbWl0aXZlLFxuICAgIHZhbGlkYXRlQm9vbGVhbixcbiAgICB2YWxpZGF0ZVN0cmluZyxcbiAgICB2YWxpZGF0ZU9iamVjdCxcbiAgICB2YWxpZGF0ZUFycmF5LFxuICAgIHZhbGlkYXRlRnVuY3Rpb24sXG4gICAgdmFsaWRhdGVJbnRlZ2VyLFxuICAgIHZhbGlkYXRlSW5zdGFuY2UsXG4gICAgdmFsaWRhdGVJdGVyYWJsZSxcbiAgICB2YWxpZGF0ZVN5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qc1wiXG5cbmltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiXG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd2YWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVQcmltaXRpdmUoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlSW50ZWdlcihhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW50ZWdlcignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSW50ZWdlcihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlU3ltYm9sKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVN5bWJvbChhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUl0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJdGVyYWJsZShhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUl0ZXJhYmxlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJdGVyYWJsZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUJvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUJvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQm9vbGVhbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVCb29sZWFuKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RyaW5nKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTdHJpbmcoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVPYmplY3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVPYmplY3QoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBPYmplY3RdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtudWxsLCBPYmplY3RdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIE9iamVjdF0sXG4gICAgICAgICAgICBbMiwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtmYWxzZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt0cnVlLCBPYmplY3RdLFxuICAgICAgICAgICAgWzQuNSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt7fSwgQmFzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBPYmplY3RdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgT2JqZWN0XSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5zdGFuY2UoYSwgYilcbiAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt7fSwgT2JqZWN0LCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgQmFzZSwgQmFzZSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUluc3RhbmNlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUluc3RhbmNlKGEsIGIpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUFycmF5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQXJyYXkoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQXJyYXkoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUZ1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVGdW5jdGlvbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlT2Zcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudHlwZU9mKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW3RydWUsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbbnVsbCwgJ251bGwnXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsICd1bmRlZmluZWQnXSxcbiAgICAgICAgICAgIFtQcm9taXNlLnJlc29sdmUoKSwgJ3Byb21pc2UnXSxcbiAgICAgICAgICAgIFtuZXcgV2Vha01hcCgpLCAnd2Vha21hcCddLFxuICAgICAgICAgICAgW25ldyBNYXAoKSwgJ21hcCddLFxuICAgICAgICAgICAgW05hTiwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB9LCAnZ2VuZXJhdG9yZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFs1LCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSwgJ2Z1bmN0aW9uJ10sXG4gICAgICAgICAgICBbL2EvLCAncmVnZXhwJ10sXG4gICAgICAgICAgICBbbmV3IERhdGUoKSwgJ2RhdGUnXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1tdLCAnYXJyYXknXSxcbiAgICAgICAgICAgIFsnJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW25ldyBFcnJvciwgJ2Vycm9yJ10sXG4gICAgICAgICAgICBbbmV3IFN0YWNrLCAnc3RhY2snXVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGIgKyAnIHdoZW4gdGhlIHZhbHVlICcgKyB0eXBlT2YoYSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZU9mKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VW5pcXVlUXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1VuaXF1ZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgVW5pcXVlUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAyfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogM30pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6Mn0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6M30pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2FkZCBubyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoW10pfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKDEpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKHRydWUpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKCl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoU3ltYm9sKFwiMVwiKSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoZnVuY3Rpb24oKXt9KX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U3RhY2t9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvc3RhY2subWpzXCI7XG5cblxuZGVzY3JpYmUoJ1N0YWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBzdGFjaztcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcHVsbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2InKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdjJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBvcCgpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QmFzZVdpdGhPcHRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIEJhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKS50by5iZS5pbnN0YW5jZU9mKEJhc2VXaXRoT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZ2V0IG9wdGlvbiBpcyB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMoe2E6IHRydWV9KS5nZXRPcHRpb24oJ2EnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cbiAgICBpdCgnY2hlY2sgbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBOb2RlKCdyb290Jyk7XG5cbiAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnbjEnKTtcbiAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnbjInKTtcbiAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnbjMnKTtcbiAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgnbjQnKTtcblxuICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnbjExJyk7XG4gICAgICAgIGNvbnN0IG4xMiA9IG5ldyBOb2RlKCduMTInKTtcbiAgICAgICAgY29uc3QgbjEzID0gbmV3IE5vZGUoJ24xMycpO1xuXG4gICAgICAgIGNvbnN0IG4yMSA9IG5ldyBOb2RlKCduMjEnKTtcbiAgICAgICAgY29uc3QgbjIyID0gbmV3IE5vZGUoJ24yMicpO1xuICAgICAgICBjb25zdCBuMjMgPSBuZXcgTm9kZSgnbjIzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxID0gbmV3IE5vZGUoJ240MScpO1xuICAgICAgICBjb25zdCBuNDIgPSBuZXcgTm9kZSgnbjQyJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMSA9IG5ldyBOb2RlKCduNDExJyk7XG4gICAgICAgIGNvbnN0IG40MTIgPSBuZXcgTm9kZSgnbjQxMicpO1xuICAgICAgICBjb25zdCBuNDEzID0gbmV3IE5vZGUoJ240MTMnKTtcblxuICAgICAgICBjb25zdCBuNDEyMSA9IG5ldyBOb2RlKCduNDEyMScpO1xuXG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQobjEpLmFwcGVuZENoaWxkKG4yKS5hcHBlbmRDaGlsZChuMykuYXBwZW5kQ2hpbGQobjQpO1xuICAgICAgICBuMS5hcHBlbmRDaGlsZChuMTEpLmFwcGVuZENoaWxkKG4xMikuYXBwZW5kQ2hpbGQobjEzKTtcbiAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjIxKS5hcHBlbmRDaGlsZChuMjIpLmFwcGVuZENoaWxkKG4yMyk7XG4gICAgICAgIG40LmFwcGVuZENoaWxkKG40MSkuYXBwZW5kQ2hpbGQobjQyKTtcbiAgICAgICAgbjQxLmFwcGVuZENoaWxkKG40MTEpLmFwcGVuZENoaWxkKG40MTIpLmFwcGVuZENoaWxkKG40MTMpO1xuICAgICAgICBuNDEyLmFwcGVuZENoaWxkKG40MTIxKTtcblxuICAgICAgICBsZXQgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKHJvb3QpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuICAgICAgICBuNDEyMS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnbjQxMjExJykpO1xuXG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ3Jvb3Q6MCcsXG4gICAgICAgICAgICAnbjE6MScsXG4gICAgICAgICAgICAnbjExOjInLFxuICAgICAgICAgICAgJ24xMjoyJyxcbiAgICAgICAgICAgICduMTM6MicsXG4gICAgICAgICAgICAnbjI6MScsXG4gICAgICAgICAgICAnbjIxOjInLFxuICAgICAgICAgICAgJ24yMjoyJyxcbiAgICAgICAgICAgICduMjM6MicsXG4gICAgICAgICAgICAnbjM6MScsXG4gICAgICAgICAgICAnbjQ6MScsXG4gICAgICAgICAgICAnbjQxOjInLFxuICAgICAgICAgICAgJ240MTE6MycsXG4gICAgICAgICAgICAnbjQxMjozJyxcbiAgICAgICAgICAgICduNDEyMTo0JyxcbiAgICAgICAgICAgICduNDEyMTE6NScsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuXG4gICAgICAgIGNvbnN0IGJiID0gbmV3IE5vZGUoJ2JiJykgLy8gYmlnIGJhbmdcblxuICAgICAgICBiYi5hcHBlbmRDaGlsZChyb290KTtcbiAgICAgICAgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKGJiKTtcblxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAnYmI6MCcsXG4gICAgICAgICAgICAncm9vdDoxJyxcbiAgICAgICAgICAgICduMToyJyxcbiAgICAgICAgICAgICduMTE6MycsXG4gICAgICAgICAgICAnbjEyOjMnLFxuICAgICAgICAgICAgJ24xMzozJyxcbiAgICAgICAgICAgICduMjoyJyxcbiAgICAgICAgICAgICduMjE6MycsXG4gICAgICAgICAgICAnbjIyOjMnLFxuICAgICAgICAgICAgJ24yMzozJyxcbiAgICAgICAgICAgICduMzoyJyxcbiAgICAgICAgICAgICduNDoyJyxcbiAgICAgICAgICAgICduNDE6MycsXG4gICAgICAgICAgICAnbjQxMTo0JyxcbiAgICAgICAgICAgICduNDEyOjQnLFxuICAgICAgICAgICAgJ240MTIxOjUnLFxuICAgICAgICAgICAgJ240MTIxMTo2JyxcbiAgICAgICAgICAgICduNDEzOjQnLFxuICAgICAgICAgICAgJ240MjozJ1xuXG4gICAgICAgIF0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMZXZlbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ24yIHNob3VsZCBsZXZlbCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBuMCA9IG5ldyBOb2RlKCdhYmMnKTtcblxuICAgICAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnZGVmJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBleHBlY3QobjAubGV2ZWwpLnRvLmJlLmVxdWFsKDApO1xuICAgICAgICAgICAgZXhwZWN0KG4xLmxldmVsKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMik7XG4gICAgICAgICAgICBleHBlY3QobjMubGV2ZWwpLnRvLmJlLmVxdWFsKDMpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgndG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG91dHB1dCBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGV4cGVjdChub2RlLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4xMSA9IG5ldyBOb2RlKCdnaGknKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnamtsJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ21ubycpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBjb25zdCBuNCA9IG5ldyBOb2RlKCdwcXInKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG40KTtcblxuICAgICAgICAgICAgZXhwZWN0KG4yLmxldmVsKS50by5iZS5lcXVhbCgyKVxuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG4wLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgLy8gZXhwZWN0KG4wLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHF1ZXVlO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWV1ZSA9IG5ldyBRdWV1ZTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwb2xsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2InKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdjJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlUmVjdXJzaXZlSXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcigpKS50by50aHJvdyhFcnJvcilcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGEgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChOb2RlUmVjdXJzaXZlSXRlcmF0b3IpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGEgY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKSkudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlUmVjdXJzaXZlSXRlcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcbiAgICAgKi9cbiAgICBpdCgndW5kZWZpbmVkIHNob3VsZCBub3QgcmVzdWx0IGluIHVuZGVmaW5lZCBub2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IobmV3IE5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFt1bmRlZmluZWRdKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlID1cbiAgICAgICAgICAgIG5ldyBOb2RlKCcxJylcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpO1xuXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbJzEnLCAnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMiddKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlIG5vZGVsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNCcpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMicpKSkpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChuZXcgTm9kZSgneCcpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZUxpc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycyJywgJzIuMScsICcyLjInLCAnMi4zJywgJzMnLCAnNCcsICc0LjEnLCAnNC4yJywgJ3gnXSk7XG5cbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcblxuaW1wb3J0IHsgRm9ybWF0dGVyIGFzIFRleHRGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVHJhbnNsYXRpb25TeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbFRyYW5zbGF0aW9uXCIpO1xuXG4vKipcbiAqIFRoZSBGb3JtYXR0ZXIgZXh0ZW5kcyB0aGUgVGV4dC5Gb3JtYXR0ZXIgd2l0aCB0aGUgcG9zc2liaWxpdHkgdG8gcmVwbGFjZSB0aGUga2V5IGJ5IGEgdHJhbnNsYXRpb24uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2kxOG4vZm9ybWF0dGVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBUZXh0Rm9ybWF0dGVyIHtcblx0LyoqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCwgdHJhbnNsYXRpb24sIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvYmplY3QsIG9wdGlvbnMpO1xuXHRcdHRoaXNbaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbF0gPSB2YWxpZGF0ZUluc3RhbmNlKFxuXHRcdFx0dHJhbnNsYXRpb24sXG5cdFx0XHRUcmFuc2xhdGlvbnMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2Zvcm1hdHRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IG1hcmtlclxuXHQgKiBAcHJvcGVydHkge2FycmF5fSBtYXJrZXIub3Blbj1bXCJpMThue1wiLFwiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNhbGxiYWNrcy5pMThuPSgpPT57fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRjYWxsYmFja3M6IHtcblx0XHRcdFx0aTE4bjogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbF0uZ2V0VGV4dCh2YWxpZGF0ZVN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCJpMThue1wiLCBcIiR7XCJdLFxuXHRcdFx0XHRjbG9zZTogW1wifVwiXSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0ga2V5IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGNsb3NpbmcgbWFya2VyIGlzIG1pc3Npbmdcblx0ICovXG5cdGZvcm1hdCh0ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCk7XG5cblx0XHRjb25zdCBvcGVuTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bMF07XG5cdFx0Y29uc3QgY2xvc2VNYXJrZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bMF07XG5cblx0XHRpZiAodGV4dC5pbmRleE9mKG9wZW5NYXJrZXIpID09PSAwKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpO1xuXG5cdFx0XHRpZiAodGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gdGV4dC5sZW5ndGggLSBjbG9zZU1hcmtlci5sZW5ndGgpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnRzID0gdmFsaWRhdGVTdHJpbmcodGV4dCkuc3BsaXQoXCI6OlwiKTtcblx0XHRjb25zdCB0cmFuc2xhdGlvbktleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOyAvLyBrZXkgdmFsdWUgZGVsaW1pdGVyXG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFydHMuam9pbihcIjo6XCIpLnRyaW0oKTtcblxuXHRcdGxldCBhc3NlbWJsZWRUZXh0ID0gYCR7b3Blbk1hcmtlcn1zdGF0aWM6JHt0cmFuc2xhdGlvbktleX0gfCBjYWxsOmkxOG5gO1xuXHRcdGlmIChwYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0YXNzZW1ibGVkVGV4dCArPSBgOjoke3BhcmFtZXRlcn1gO1xuXHRcdH1cblx0XHRhc3NlbWJsZWRUZXh0ICs9IGNsb3NlTWFya2VyO1xuXHRcdHJldHVybiBzdXBlci5mb3JtYXQoYXNzZW1ibGVkVGV4dCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnRm9ybWF0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBtYXJrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2VuJylcbiAgICAgICAgICAgICAgICAuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdGhla2V5OiBcIiR7YW5pbWFsfSBoYXMgZWF0ZW4gdGhlICR7Zm9vZH0hXCJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZiA9IG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChmLmZvcm1hdChcImkxOG57dGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2V9XCIpKS50by5iZS5lcXVhbCgnZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEnKTtcbiAgICAgICAgICAgIC8vIFx1MjFBNiBkb2cgaGFzIGVhdGVuIHRoZSBjYWtlISAgICAgICAgICAgICAgICBcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGhvdXQgbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIG1pc3NpbmcgbWFya2VyXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoXCJ0aGVrZXk6OmFuaW1hbD1kb2c6OmZvb2Q9Y2FrZVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThue3RyYW5zbGF0aW9ua2V5OjphPTM6OmI9NX0nLCAndGVzdCBpcyAzIGFuZCA1J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2RlJykuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25rZXk6IFwidGVzdCBpcyAke2F9IGFuZCAke2J9XCJcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuOyIsICJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VMb2NhbGUsIExvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcnNlTG9jYWxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gcGFyc2VMb2NhbGUoZylcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmxvY2FsZVN0cmluZykudG8uYmUuZXF1YWwoZyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sYW5ndWFnZSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5yZWdpb24pLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUuc2NyaXB0KS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnZhcmlhbnRzKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmV4dGxhbmcpLnRvLmJlLmVxdWFsKGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucHJpdmF0ZVVzZSkudG8uYmUuZXF1YWwoZik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvY2FsZShhLCBiLCBjLCBkLCBlLCBmKS50b1N0cmluZygpKS5pcy5lcXVhbChnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0FUVFJJQlVURV9PQkpFQ1RMSU5LfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldExpbmtlZE9iamVjdHN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50VHJhbnNsYXRpb25zLCBUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm92aWRlcicsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgbGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1Byb3ZpZGVyIGFuZCBEb20nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIpO1xuXG4gICAgICAgIGl0KCdhc3NpZ25Ub0VsZW1lbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQcm92aWRlcigpO1xuICAgICAgICAgICAgY29uc3QgciA9IHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHIudGhlbigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT0JKRUNUTElOSyk7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgbm90IHNldFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKVxuICAgICAgICAgICAgICAgIGlmIChpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiTm8gbGlua2VkIG9iamVjdCBmb3VuZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiBvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jVHJhbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2NUcmFucykuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuXG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnN0YW5jZSwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZldGNoIH07XG5cbi8qKlxuICogVGhlIGZldGNoIHByb3ZpZGVyIHJldHJpZXZlcyBhIEpTT04gZmlsZSBmcm9tIHRoZSBnaXZlbiBVUkwgYW5kIHJldHVybnMgYSB0cmFuc2xhdGlvbiBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqIEB0dXRvcmlhbCBpMThuLWxvY2FsZS1hbmQtZm9ybWF0dGVyXG4gKi9cbmNsYXNzIEZldGNoIGV4dGVuZHMgUHJvdmlkZXIge1xuXHQvKipcblx0ICogQXMgb3B0aW9ucyB0aGUga2V5IGBmZXRjaGAgY2FuIGJlIHBhc3NlZC4gVGhpcyBjb25maWcgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgZmV0Y2ggbWV0aG9kIGFzIGluaXQuXG5cdCAqXG5cdCAqIFRoZSB1cmwgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzIChsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSwgc28geW91IGNhbiBzcGVjaWZ5IG9uZSB1cmwgZm9yIGFsbCB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgRmV0Y2goJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL2Fzc2V0cy8ke2xhbmd1YWdlfS5qc29uJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNlZSB7QGxpbmsgTW9uc3Rlci5JMThuLlByb3ZpZGVycy5GZXRjaCNkZWZhdWx0c31cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNofVxuXHQgKi9cblx0Y29uc3RydWN0b3IodXJsLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAoaXNJbnN0YW5jZSh1cmwsIFVSTCkpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyh1cmwpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByb3BlcnR5IHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0dGhpcy51cmwgPSB1cmw7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHNcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPWNvcnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNhY2hlPW5vLWNhY2hlXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1vbWl0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1mb2xsb3dcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZmVycmVyUG9saWN5PW5vLXJlZmVycmVyXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZChcblx0XHRcdHtcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0XHRcdFx0bW9kZTogXCJjb3JzXCIsIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdFx0XHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJvbWl0XCIsIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0XHRcdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsICpuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSwgb3JpZ2luLCBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHNhbWUtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCB1bnNhZmUtdXJsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobG9jYWxlLmdldE1hcCgpKTtcblxuXHRcdHJldHVybiBnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKFxuXHRcdFx0Zm9ybWF0dGVyLmZvcm1hdCh0aGlzLnVybCksXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KSxcblx0XHQpXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkuYXNzaWduVHJhbnNsYXRpb25zKGRhdGEpO1xuXHRcdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RmV0Y2h9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBmZXRjaFJlZmVyZW5jZTtcblxuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmZXRjaCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmV0Y2gnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgcCA9IChuZXcgRmV0Y2gobmV3IFVSTCgnaHR0cDovL2V4YW1wbGUuY29tJykpKS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChwKS5pcy5pbnN0YW5jZW9mKFByb21pc2UpO1xuXG4gICAgICAgICAgICBwLnRoZW4ociA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuY29uc3QgaHRtbDEgPSBgXG48c2NyaXB0IGlkPVwidGVtcGxvY2FsZVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG57XG4gICAgICAgIFwia2V5XCI6IFwidHJhbnNsYXRpb25cIlxufVxuPC9zY3JpcHQ+XG5gO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRW1iZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZ2V0IG1vY2sgZGF0YSBhbmQgY3JlYXRlIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdlbWJlZCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRW1iZWQoJ3RlbXBsb2NhbGUnKTtcbiAgICAgICAgICAgIGxldCBwID0gZS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiBcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSByLmdldFRleHQoJ2tleScpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0KS5pcy5lcXVhbCgndHJhbnNsYXRpb24nKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7XG4gICAgVHJhbnNsYXRpb25zLFxuICAgIGdldERvY3VtZW50VHJhbnNsYXRpb25zXG4gICAgXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnSW5zdGFuY2UgYW5kIEluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKTtcblxuICAgICAgICAgICAgdHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NyZWF0ZSBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKSkuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW5pdCB0cmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRUZXh0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0IGVuLUdCJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QxJykpLmlzLmVxdWFsKCdhYmMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSwgc2V0IGFuZCBnZXQgIGVuLUdCIHdpdGggcGx1cmFscnVsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uZ2V0VGV4dCgndGVzdDInKSkuaXMuZXF1YWwoJ3h5eicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBpbml0RG9jdW1lbnRUcmFuc2xhdGlvblxuICAgICAqL1xuXG4gICAgZGVzY3JpYmUoXCJ0ZXN0IGluaXREb2N1bWVudFRyYW5zbGF0aW9uIFwiLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG4gICAgXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJhYmNcIixcbiAgICAgICAgXCJ0ZXN0MlwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgICBcbiAgICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ0luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24gYmVjYXVzZSBvZiBkZWZhdWx0XG4gICAgICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW0pLmdldFRleHQoJ25vLWtleScsJ3dpdGgtZGVmYXVsdCcpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3dpdGgtZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCd0ZXN0MScpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3h5eicpO1xuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cblxufSk7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFFBQUksVUFBVTtBQUFXLGFBQU87QUFDaEMsUUFBSSxVQUFVO0FBQU0sYUFBTztBQUMzQixXQUFPLE9BQU8sUUFBUSxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQzVDO0FBZUEsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSTtBQUVKLFFBQUksVUFBVSxVQUFhLFVBQVUsTUFBTTtBQUMxQyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU8sT0FBTztBQUVkLFFBQ0MsU0FBUyxZQUNU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Im5hbWVzIjogWyJBc3NlcnRpb25FcnJvciIsICJleHRlbmQiLCAiZ2xvYmFsIiwgIkFzc2VydGlvbkVycm9yIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm9iaiIsICJ0cnVuY2F0ZSIsICJvcHRpb25zIiwgInNpemUiLCAiZ2V0QXJyYXlOYW1lIiwgImlzTmFOIiwgImVzY2FwZSIsICJnZXRQcm9taXNlVmFsdWUiLCAiQm9vbGVhbiIsICJXZWFrU2V0IiwgIldlYWtNYXAiLCAiRGF0YVZpZXciLCAiQXJyYXlCdWZmZXIiLCAiaW5zcGVjdEN1c3RvbSIsICJjb25maWciLCAib3B0aW9ucyIsICJjb25maWciLCAiaXNQcmltaXRpdmUiLCAib3B0aW9ucyIsICJjb25maWciLCAiY2hhaSIsICJmbiIsICJjb25maWciLCAiY2hhaSIsICJjaGFpIiwgImNoYWkiLCAiY2hhaSIsICJjaGFpIiwgImEiLCAiaXNOYU4iLCAiZ2V0T3BlcmF0b3IiLCAiaXNPYmplY3QiLCAiY29uZmlnIiwgInV0aWwiLCAiQXNzZXJ0aW9uRXJyb3IiLCAiQXNzZXJ0aW9uIiwgImZuIiwgImNoYWkiLCAiQXNzZXJ0aW9uIiwgIkFzc2VydGlvbkVycm9yIiwgImEiLCAic3RhcnQiLCAiY29udGFpbnMiLCAibWF0Y2hJZHgiLCAiZm4iLCAiY2hhaSIsICJ1dGlsIiwgImNoYWkiLCAidXRpbCIsICJBc3NlcnRpb24iLCAic2hvdWxkIiwgImZuIiwgImNoYWkiLCAidXRpbCIsICJBc3NlcnRpb24iLCAiYXNzZXJ0IiwgImZuIiwgInV0aWwiLCAiZm4iLCAiY29uZmlnIiwgImNvcmUiLCAiZXhwZWN0IiwgInNob3VsZCIsICJhc3NlcnQiLCAicmVxdWlyZV9jaGFpIiwgImEiLCAiU3RvcmFnZSIsICJzZWxmIiwgIm5vZGUiLCAiYWRkZWROb2RlcyIsICJhIiwgImRlZmluZSIsICJvcHRpb25zIiwgIkJ1ZmZlclNvdXJjZUNvbnZlcnRlciIsICJhIiwgInNpemUiLCAib2Zmc2V0IiwgIkNvbnZlcnQiLCAiY29tYmluZSIsICJyZXRCdWYiLCAicmV0VmlldyIsICJCb29sZWFuIiwgIlNldCIsICJfYSIsICJtYXgiLCAicmV0VmlldyIsICJzaXplIiwgInRlbXBCdWZmZXJWaWV3IiwgIm9mZnNldCIsICJBc25UeXBlVHlwZXMiLCAiQXNuUHJvcFR5cGVzIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiQm9vbGVhbiIsICJfYSIsICJTZXQiLCAib3B0aW9ucyIsICJkZWZhdWx0Q29udmVydGVyIiwgIl9hIiwgIlNldCIsICJTZXQiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvcHRpb25zIiwgImZvcm1hdCIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIm9mZnNldCIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiQ3VydmVQcml2YXRlS2V5IiwgImxlbiIsICJpIiwgInN0YXJ0IiwgImVuZCIsICJsZW4yIiwgIm9mZnNldCIsICJCdWZmZXIiLCAiaXNJbnN0YW5jZSIsICJzaXplIiwgImEiLCAiY29uY2F0IiwgInN0YXJ0IiwgImVuZCIsICJtYXgiLCAicmVhZCIsICJpIiwgIm9mZnNldCIsICJ3cml0ZSIsICJieXRlTGVuZ3RoIiwgIm1pbiIsICJDcnlwdG8iLCAiYSIsICJzdGFydCIsICJlbmQiLCAicHJvY2VzcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkNyeXB0b0tleSIsICJBZXNDYmNQcm92aWRlciIsICJBZXNDbWFjUHJvdmlkZXIiLCAiQWVzQ3RyUHJvdmlkZXIiLCAiQWVzR2NtUHJvdmlkZXIiLCAiQWVzS3dQcm92aWRlciIsICJBZXNFY2JQcm92aWRlciIsICJSc2FQcml2YXRlS2V5IiwgIlJzYVB1YmxpY0tleSIsICJSc2FTc2FQcm92aWRlciIsICJSc2FQc3NQcm92aWRlciIsICJSc2FPYWVwUHJvdmlkZXIiLCAiRWNQcml2YXRlS2V5IiwgIkVjUHVibGljS2V5IiwgIkVjZHNhUHJvdmlkZXIiLCAiRWNkaFByb3ZpZGVyIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJFZERzYVByb3ZpZGVyIiwgIkVjZGhFc1Byb3ZpZGVyIiwgIlBia2RmMlByb3ZpZGVyIiwgIkhtYWNQcm92aWRlciIsICJIa2RmUHJvdmlkZXIiLCAiU2hha2UxMjhQcm92aWRlciIsICJTaGFrZTI1NlByb3ZpZGVyIiwgIlN1YnRsZUNyeXB0byIsICJpbml0X2luZGV4X2VzIiwgImNyeXB0b19fZGVmYXVsdCIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJoYXNoIiwgIl9hIiwgImluaXRfZW51bXMiLCAibmFtZSIsICJzdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAid2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAiZWZmZWN0IiwgIm9wdGlvbnMiLCAid2luZG93IiwgImhhc2giLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImNsaXBwaW5nUGFyZW50cyIsICJnZXRDb21wdXRlZFN0eWxlIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiaW5pdF9lbnVtcyIsICJmbiIsICJtZXJnZWQiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJjcmVhdGVQb3BwZXIiLCAicmVmZXJlbmNlIiwgInBvcHBlciIsICJvcHRpb25zIiwgImZuIiwgInN0YXRlIiwgImVmZmVjdCIsICJub29wRm4iLCAiaW5pdF9lbnVtcyIsICJzeW1ib2wiLCAiaW5pdCIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgInN5bWJvbCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJnZXRXaW5kb3ciLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uc3RhbnRzIiwgImNvbnNvbGUiLCAiY29uY2F0IiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInRvZ2dsZSIsICJpbml0X2xvY2FsZSIsICJERUxJTUlURVIiLCAib3B0aW9ucyIsICJhIiwgImludGVybmFsIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAiZGlmZiIsICJkb2N1bWVudCIsICJvcHRpb25zIiwgInZhbHVlIiwgImUiLCAiaSIsICJzeW1ib2wiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJvcHRpb25zIiwgInNlbGYiLCAib3B0aW9ucyIsICJjdXN0b21FbGVtZW50cyIsICJpbml0X2NvbnN0YW50cyIsICJtaW4iLCAibWF4IiwgImdsb2JhbFJlZmVyZW5jZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInQiLCAiaW5pdF90aGVtZSIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfcG9wcGVyIiwgInNlbGYiLCAib3B0aW9ucyIsICJzaG93IiwgInJlZmVyZW5jZSIsICJpbml0X3RhYnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF90aGVtZSIsICJpbml0X3BvcHBlciIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgIm1pbiIsICJtYXgiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zcGxpdF9zY3JlZW4iLCAiaW5pdF9ub3RpZnkiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgImludGVybmFsU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgImluaXRfYnV0dG9uIiwgImEiLCAic3RhcnQiLCAiZW5kIiwgIm1heCIsICJtaW4iLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJwbGFjZW1lbnRzIiwgInJvdW5kIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvcHRpb25zIiwgInBsYXRmb3JtIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiYXJyb3ciLCAiZmxpcCIsICJvZmZzZXQiLCAiY29uZmlnIiwgImZuIiwgIm1pbiIsICJtYXgiLCAicGxhY2VtZW50cyIsICJhbGlnbm1lbnQiLCAiYSIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJzaWRlcyIsICJzaWRlIiwgInBsYWNlbWVudCIsICJvdmVyZmxvdyIsICJ4IiwgInkiLCAiZ2V0Tm9kZU5hbWUiLCAiaXNOb2RlIiwgImdldFdpbmRvdyIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiaXNFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzSFRNTEVsZW1lbnQiLCAicm91bmQiLCAiaXNFbGVtZW50IiwgImdldFdpbmRvdyIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAibGVmdCIsICJ0b3AiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZ2V0Tm9kZU5hbWUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldERvY3VtZW50UmVjdCIsICJtYXgiLCAiZ2V0Vmlld3BvcnRSZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Q2xpcHBpbmdSZWN0IiwgIm1pbiIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgImdldE9mZnNldFBhcmVudCIsICJ3aW5kb3ciLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgIm9wdGlvbnMiLCAicmVmZXJlbmNlIiwgImF1dG9QbGFjZW1lbnQiLCAic2hpZnQiLCAiZmxpcCIsICJzaXplIiwgImFycm93IiwgImNvbXB1dGVQb3NpdGlvbiIsICJvcHRpb25zIiwgImNvbmZpZyIsICJmbiIsICJmbGlwIiwgInNoaWZ0IiwgImxpbmUiLCAiYXV0b1BsYWNlbWVudCIsICJkZXRlY3RPdmVyZmxvdyIsICJhcnJvdyIsICJzaXplIiwgIm9mZnNldCIsICJjb21wdXRlUG9zaXRpb24iLCAieCIsICJ5IiwgImluaXRfY29uc3RhbnRzIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJzZWxmIiwgIm9ic2VydmVyIiwgInJ1biIsICJzaG93IiwgImhpZGUiLCAiaW5pdE9wdGlvbk9ic2VydmVyIiwgIm1heCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJmb2N1c0ZpbHRlciIsICJhIiwgImdsb2JhbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImVsZW1lbnQiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJoaWRlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInNlbGYiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJzaG93IiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2J1dHRvbiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAidXBkYXRlUG9wcGVyIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImFycm93RWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlcl9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9idXR0b24iLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAib3B0aW9ucyIsICJzZWxmIiwgImluaXRFdmVudGhhbmRsZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlybV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9wb3BwZXJfYnV0dG9uIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAicGFyc2VPcHRpb25zSlNPTiIsICJvcHRpb25zIiwgImluaXRfc3RvcmFnZSIsICJzZWxmIiwgImZldGNoRGF0YSIsICJpbml0IiwgIm9wdGlvbnMiLCAiTWVzc2FnZSIsICJpbml0X21lc3NhZ2UiLCAic2VsZiIsICJNZXNzYWdlIiwgImluaXRfbWVzc2FnZSIsICJvcHRpb25zIiwgIldlYkNvbm5lY3QiLCAiaW5pdF93ZWJjb25uZWN0IiwgImluaXRfbWVzc2FnZSIsICJvcHRpb25zIiwgIk1lc3NhZ2UiLCAiaW5pdF9zdG9yYWdlIiwgImluaXRfc3RvcmFnZSIsICJpbml0X2NvbnN0YW50cyIsICJmbiIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0T2JzZXJ2ZXIiLCAic2VsZiIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9mb3JtIiwgImluaXRfd2ViY29ubmVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgIldlYkNvbm5lY3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJzZWxmIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAib3B0aW9ucyIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMiLCAiTm9kZSIsICJpbml0RXZlbnRIYW5kbGVyIiwgImEiLCAia2V5RXZlbnRIYW5kbGVyIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImdldFRlbXBsYXRlIiwgImluaXRfdHJlZV9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgInN3aXRjaEVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgImdldFRlbXBsYXRlIiwgImluaXRfdG9nZ2xlX3N3aXRjaCIsICJpbml0X2NvbnN0YW50cyIsICJUZW1wbGF0ZSIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCAiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3RlbXBsYXRlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiZG9jdW1lbnQiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicGFyc2VPcHRpb25zSlNPTiIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJzZWxmIiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJhcHBlbmRUb0RvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJ2ZXJzaW9uIiwgImV2ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb25zdGFudHMiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJkb2N1bWVudCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29sbGFwc2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9ob3N0IiwgImluaXRfdXRpbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kZXRhaWxzIiwgImluaXRfaG9zdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb2xsYXBzZSIsICJpbnRlcm5hbENvdW50ZXIiLCAiY2hhaSIsICJjaGFpIiwgImlzSFRNTEVsZW1lbnQiLCAiY29udGFpbnMiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiU3RvcmFnZSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIlRhYnMiLCAiQ3J5cHRvIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3BsaXRTY3JlZW4iLCAiQ3J5cHRvIiwgImdsb2JhbCIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiUmVsb2FkIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTdGF0ZUJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiU2VsZWN0IiwgIm9wdGlvbnMiLCAiZSIsICJhIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ29uZmlybUJ1dHRvbiIsICJpbml0X3N0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJzZWxmIiwgImZvcm0iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUcmVlU2VsZWN0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiVG9nZ2xlU3dpdGNoIiwgImV4cGVjdCIsICJnbG9iYWwiLCAibW9ja2ludGVyc2VjdGlvbm9ic2VydmVyIiwgImh0bWwxIiwgIlRlbXBsYXRlIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgIk1lc3NhZ2UiLCAiZXhwZWN0IiwgIk5vdGlmeSIsICJOb3RpZnkiLCAiZXhwZWN0IiwgIm11dGF0aW9ub2JzZXJ2ZXIiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImluaXRfdXRpbCIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImEiLCAib3B0aW9ucyIsICJzdGFydCIsICJlbmQiLCAib3B0aW9ucyIsICJyYW5kb20iLCAiYSIsICJtYXgiLCAiYSIsICJkaWZmIiwgImEiLCAiYSIsICJhIiwgImNvbnNvbGUiLCAiYSIsICJhIiwgImhhbmRsZXIiLCAiaW5pdF9tZXNzYWdlIiwgIk1lc3NhZ2UiLCAiaW5pdF9tZXNzYWdlIiwgIk1lc3NhZ2UiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiaW5pdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJtdXRhdGlvbm9ic2VydmVyIiwgImFkZGVkTm9kZXMiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZSIsICJvcHRpb25zIiwgImluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMiLCAiZ2xvYmFsIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgImh0bWwzIiwgIlVwZGF0ZXIiLCAib3B0aW9ucyIsICJ2IiwgImEiLCAiaW5pdF9sb2NhbGUiLCAiYSIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQiLCAib3B0aW9ucyIsICJhIiwgInYiLCAid2luZG93UmVhZHkiLCAiZG9tUmVhZHkiLCAiZ2V0V2luZG93IiwgImEiLCAiZXhwZWN0IiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImNvbnRyb2wiLCAiaHRtbDEiLCAiaHRtbDIiLCAiaHRtbDMiLCAic3ltYm9sIiwgImEiLCAiUmVzb3VyY2UiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiaHRtbDEiLCAiQ3VzdG9tQ29udHJvbCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAibSIsICJpbml0X2NvbnN0YW50cyIsICJhIiwgIm9wdGlvbnMiLCAiaW5pdF93ZWJjb25uZWN0IiwgInRlc3RVcmwiLCAiV2ViQ29ubmVjdCIsICJjbG9uZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImkiLCAiYSIsICJhIiwgImIiLCAiYyIsICJodG1sMSIsICJhIiwgIk5vZGVMaXN0IiwgImEiLCAiYSIsICJhIiwgImh0bWwxIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAibWF4IiwgImEiLCAiUmFuZG9tSUQiLCAiVVVJRCIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiRm9ybWF0dGVyIiwgIm9wdGlvbnMiLCAiRm9ybWF0dGVyIiwgImEiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJodG1sMSIsICJ0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImUiLCAiaHRtbDEiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3NlcnRpb24tZXJyb3JAMS4xLjAvbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aHZhbEAxLjEuMS9ub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9mbGFnLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL3Rlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3R5cGUtZGV0ZWN0QDQuMC44L25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dldC1mdW5jLW5hbWVAMi4wLjIvbm9kZV9tb2R1bGVzL2dldC1mdW5jLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvdXBlQDIuMy43L25vZGVfbW9kdWxlcy9sb3VwZS9sb3VwZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9jb25maWcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vYmpEaXNwbGF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE1lc3NhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVlcC1lcWxANC4xLjMvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2lzUHJveHlFbmFibGVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZFByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvcHJveGlmeS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9hZGRNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGVjay1lcnJvckAxLjAuMy9ub2RlX21vZHVsZXMvY2hlY2stZXJyb3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaXNOYU4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvYXNzZXJ0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2Fzc2VydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9kb20tc3RvcmFnZUAyLjEuMC9ub2RlX21vZHVsZXMvZG9tLXN0b3JhZ2UvbGliL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbEAxLjMuMTAvbm9kZV9tb2R1bGVzL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dHN1dGlsc0AxLjMuNS9ub2RlX21vZHVsZXMvcHZ0c3V0aWxzL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wdnV0aWxzQDEuMS4zL25vZGVfbW9kdWxlcy9wdnV0aWxzL2J1aWxkL3V0aWxzLmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc24xanNAMy4wLjUvbm9kZV9tb2R1bGVzL2FzbjFqcy9idWlsZC9pbmRleC5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvYml0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL29jdGV0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvY29udmVydGVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2hlbHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3N0b3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9kZWNvcmF0b3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvcGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L29iamVjdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9jb252ZXJ0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNi4yL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuNy44L25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNC41L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvc2xlZXAubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vc2xvdHRlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9zZXQtb3B0aW9uLWZyb20tYXR0cmlidXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmV0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L3N0eWxlc2hlZXQvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9zcGxpdC1zY3JlZW4ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1zY3JlZW4ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi4xL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi4wL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjEvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjMvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90b2dnbGUtc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZm9jdXNtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L292ZXJsYXkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4Lm1qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9zbGl0LXNjcmVlbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanMiLCAiLi4vY2FzZXMvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2dlbmVyYXRlLXJhbmdlLWNvbXBhcmlzb24tZXhwcmVzc2lvbi5tanMiLCAiLi4vY2FzZXMvdGV4dC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy9tYXRoL3JhbmRvbS5tanMiLCAiLi4vY2FzZXMvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi9jYXNlcy91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uL3V0aWwvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvbW9uc3Rlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGRtYXAubWpzIiwgIi4uL2Nhc2VzL2RhdGEvdHJhbnNmb3JtZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGlmZi5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGF0aGZpbmRlci5tanMiLCAiLi4vY2FzZXMvZGF0YS9waXBlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L29yb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc29iamVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2FuZG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L3ZhbGlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90b2tlbmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZlcnNpb24ubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2dsb2JhbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3V1aWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lzLm1qcyIsICIuLi9jYXNlcy90eXBlcy92YWxpZGF0ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi9jYXNlcy90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvc3RhY2subWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi9jYXNlcy9pMThuL3RyYW5zbGF0aW9ucy5tanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHtcblx0aXNJdGVyYWJsZSxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3ltYm9sLFxuXHRpc0Jvb2xlYW4sXG5cdGlzU3RyaW5nLFxuXHRpc09iamVjdCxcblx0aXNJbnN0YW5jZSxcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxufTtcblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiBjaGVjayBpZiBhIHZhbHVlIGlzIGl0ZXJhYmxlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmUoKWAuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHZhciB0eXBlO1xuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdGlmIChcblx0XHR0eXBlID09PSBcInN0cmluZ1wiIHx8XG5cdFx0dHlwZSA9PT0gXCJudW1iZXJcIiB8fFxuXHRcdHR5cGUgPT09IFwiYm9vbGVhblwiIHx8XG5cdFx0dHlwZSA9PT0gXCJzeW1ib2xcIlxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgc3ltYm9sXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTMubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0cmV0dXJuIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYm9vbGVhbi5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy02Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3QgYW5kIGluc3RhbmNlIG9mIGluc3RhbmNlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy03Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHsqfSBpbnN0YW5jZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBpbnN0YW5jZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYXJyYXlcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBmdW5jdGlvblxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy05Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGFuIGludGVnZXIuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEwLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Jvb2xlYW4sXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW5zdGFuY2UsXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcblx0aXNTeW1ib2wsXG59IGZyb20gXCIuL2lzLm1qc1wiO1xuXG5leHBvcnQge1xuXHR2YWxpZGF0ZUl0ZXJhYmxlLFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlQXJyYXksXG5cdHZhbGlkYXRlU3ltYm9sLFxuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBwcmltaXRpdmUgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNQcmltaXRpdmUoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJdGVyYWJsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVByaW1pdGl2ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSkge1xuXHRpZiAoIWlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBib29sZWFuIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQm9vbGVhbigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUJvb2xlYW59IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oZmFsc2UpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gIHZhbHVlIGlzIG5vdCBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlKSB7XG5cdGlmICghaXNCb29sZWFuKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBib29sZWFuXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3RyaW5nIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3RyaW5nKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3RyaW5nfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUpIHtcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzT2JqZWN0KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3Qoe30pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVPYmplY3QodmFsdWUpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgb2JqZWN0XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IGluc3RhbmNlLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSW5zdGFuY2V9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKHt9LCBPYmplY3QpKSAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoJzInLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKFtdLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSkge1xuXHRcdGxldCBuID0gXCJcIjtcblx0XHRpZiAoaXNPYmplY3QoaW5zdGFuY2UpIHx8IGlzRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG5cdFx0XHRuID0gaW5zdGFuY2U/LltcIm5hbWVcIl07XG5cdFx0fVxuXG5cdFx0aWYgKG4pIHtcblx0XHRcdG4gPSBgICR7bn1gO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiR7bn1gKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGFycmF5IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQXJyYXkoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVBcnJheX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIGFycmF5XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3ltYm9sIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3ltYm9sKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3ltYm9sfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3ltYm9sKCkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIHN5bWJvbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xuXHRpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgZnVuY3Rpb24gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNGdW5jdGlvbigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUZ1bmN0aW9ufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbigoKT0+e30pKSAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0ludGVnZXIoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcih0cnVlKSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoMikpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyKHZhbHVlKSB7XG5cdGlmICghaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb24gfTtcblxuLyoqXG4gKiBAdHlwZSB7b2JqZWN9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgZ2xvYmFsUmVmZXJlbmNlO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZW52aXJvbm1lbnQuXG4gKi9cbihmdW5jdGlvbiAoKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IGdsb2JhbFRoaXM7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gc2VsZjtcblx0XHRyZXR1cm47XG5cdH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IHdpbmRvdztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJfX21vbnN0ZXJfX1wiLCB7XG5cdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0fSk7XG5cblx0aWYgKHR5cGVvZiBfX21vbnN0ZXJfXyA9PT0gXCJvYmplY3RcIikge1xuXHRcdF9fbW9uc3Rlcl9fLmdsb2JhbFRoaXMgPSBfX21vbnN0ZXJfXztcblx0XHRkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21vbnN0ZXJfXztcblxuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IGdsb2JhbFRoaXM7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZW52aXJvbm1lbnQuXCIpO1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsVGhpc1xuICpcbiAqIElmIGdsb2JhbFRoaXMgaXMgbm90IGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBwb2x5ZmlsbGVkXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAcmV0dXJucyB7b2JqZWN9IGdsb2JhbFRoaXNcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuXHRyZXR1cm4gZ2xvYmFsUmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgb2JqZWN0IG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtnZXRHbG9iYWxPYmplY3R9IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtvYmplY31cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IG8gPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIG9iamVjdCAke25hbWV9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdHZhbGlkYXRlT2JqZWN0KG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uIG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxGdW5jdGlvbigpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbEZ1bmN0aW9ufSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGNvbnNvbGUubG9nKGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtvYmplY31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEZ1bmN0aW9uKG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IGYgPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIGZ1bmN0aW9uICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVGdW5jdGlvbihmKTtcblx0cmV0dXJuIGY7XG59XG4iLCAiLyohXG4gKiBhc3NlcnRpb24tZXJyb3JcbiAqIENvcHlyaWdodChjKSAyMDEzIEpha2UgTHVlciA8amFrZUBxdWFsaWFuY3kuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIG9uZSBvYmplY3QgdG8gYW5vdGhlciBleGNsdWRpbmcgYW55IG9yaWdpbmFsbHlcbiAqIGxpc3RlZC4gUmV0dXJuZWQgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgYHt9YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhjbHVkZWQgcHJvcGVydGllcyAuLi5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5cbmZ1bmN0aW9uIGV4Y2x1ZGUgKCkge1xuICB2YXIgZXhjbHVkZXMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgZnVuY3Rpb24gZXhjbHVkZVByb3BzIChyZXMsIG9iaikge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoIX5leGNsdWRlcy5pbmRleE9mKGtleSkpIHJlc1trZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gZXh0ZW5kRXhjbHVkZSAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICwgaSA9IDBcbiAgICAgICwgcmVzID0ge307XG5cbiAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4Y2x1ZGVQcm9wcyhyZXMsIGFyZ3NbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG59O1xuXG4vKiFcbiAqIFByaW1hcnkgRXhwb3J0c1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gQXNzZXJ0aW9uRXJyb3I7XG5cbi8qKlxuICogIyMjIEFzc2VydGlvbkVycm9yXG4gKlxuICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBKYXZhU2NyaXB0IGBFcnJvcmAgY29uc3RydWN0b3IgZm9yXG4gKiBhc3NlcnRpb24gYW5kIHZhbGlkYXRpb24gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyB0byBpbmNsdWRlIChvcHRpb25hbClcbiAqIEBwYXJhbSB7Y2FsbGVlfSBzdGFydCBzdGFjayBmdW5jdGlvbiAob3B0aW9uYWwpXG4gKi9cblxuZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IgKG1lc3NhZ2UsIF9wcm9wcywgc3NmKSB7XG4gIHZhciBleHRlbmQgPSBleGNsdWRlKCduYW1lJywgJ21lc3NhZ2UnLCAnc3RhY2snLCAnY29uc3RydWN0b3InLCAndG9KU09OJylcbiAgICAsIHByb3BzID0gZXh0ZW5kKF9wcm9wcyB8fCB7fSk7XG5cbiAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVW5zcGVjaWZpZWQgQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLnNob3dEaWZmID0gZmFsc2U7XG5cbiAgLy8gY29weSBmcm9tIHByb3BlcnRpZXNcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgfVxuXG4gIC8vIGNhcHR1cmUgc3RhY2sgdHJhY2VcbiAgc3NmID0gc3NmIHx8IEFzc2VydGlvbkVycm9yO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzc2YpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHRoaXMuc3RhY2sgPSBlLnN0YWNrO1xuICAgIH1cbiAgfVxufVxuXG4vKiFcbiAqIEluaGVyaXQgZnJvbSBFcnJvci5wcm90b3R5cGVcbiAqL1xuXG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5cbi8qIVxuICogU3RhdGljYWxseSBzZXQgbmFtZVxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcblxuLyohXG4gKiBFbnN1cmUgY29ycmVjdCBjb25zdHJ1Y3RvclxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzc2VydGlvbkVycm9yO1xuXG4vKipcbiAqIEFsbG93IGVycm9ycyB0byBiZSBjb252ZXJ0ZWQgdG8gSlNPTiBmb3Igc3RhdGljIHRyYW5zZmVyLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkZSBzdGFjayAoZGVmYXVsdDogYHRydWVgKVxuICogQHJldHVybiB7T2JqZWN0fSBvYmplY3QgdGhhdCBjYW4gYmUgYEpTT04uc3RyaW5naWZ5YFxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgdmFyIGV4dGVuZCA9IGV4Y2x1ZGUoJ2NvbnN0cnVjdG9yJywgJ3RvSlNPTicsICdzdGFjaycpXG4gICAgLCBwcm9wcyA9IGV4dGVuZCh7IG5hbWU6IHRoaXMubmFtZSB9LCB0aGlzKTtcblxuICAvLyBpbmNsdWRlIHN0YWNrIGlmIGV4aXN0cyBhbmQgbm90IHR1cm5lZCBvZmZcbiAgaWYgKGZhbHNlICE9PSBzdGFjayAmJiB0aGlzLnN0YWNrKSB7XG4gICAgcHJvcHMuc3RhY2sgPSB0aGlzLnN0YWNrO1xuICB9XG5cbiAgcmV0dXJuIHByb3BzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBwYXRodmFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpY2FscGFyYWRveC9maWx0clxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmhhc1Byb3BlcnR5KG9iamVjdCwgbmFtZSlcbiAqXG4gKiBUaGlzIGFsbG93cyBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgb3duXG4gKiBvciBpbmhlcml0ZWQgZnJvbSBwcm90b3R5cGUgY2hhaW4gbmFtZWQgcHJvcGVydHkuXG4gKlxuICogQmFzaWNhbGx5IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIGBpbmBcbiAqIG9wZXJhdG9yIGJ1dCB3b3JrcyBwcm9wZXJseSB3aXRoIG51bGwvdW5kZWZpbmVkIHZhbHVlc1xuICogYW5kIG90aGVyIHByaW1pdGl2ZXMuXG4gKlxuICogICAgIHZhciBvYmogPSB7XG4gKiAgICAgICAgIGFycjogWydhJywgJ2InLCAnYyddXG4gKiAgICAgICAsIHN0cjogJ0hlbGxvJ1xuICogICAgIH1cbiAqXG4gKiBUaGUgZm9sbG93aW5nIHdvdWxkIGJlIHRoZSByZXN1bHRzLlxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmosICdzdHInKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmosICdjb25zdHJ1Y3RvcicpOyAgLy8gdHJ1ZVxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ2JhcicpOyAgLy8gZmFsc2VcbiAqXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgJ2xlbmd0aCcpOyAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgMSk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLnN0ciwgNSk7ICAvLyBmYWxzZVxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAnbGVuZ3RoJyk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLmFyciwgMik7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLmFyciwgMyk7ICAvLyBmYWxzZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gbmFtZVxuICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgaXQgZXhpc3RzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBoYXNQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRoZSBgaW5gIG9wZXJhdG9yIGRvZXMgbm90IHdvcmsgd2l0aCBwcmltaXRpdmVzLlxuICByZXR1cm4gbmFtZSBpbiBPYmplY3Qob2JqKTtcbn1cblxuLyogIVxuICogIyMgcGFyc2VQYXRoKHBhdGgpXG4gKlxuICogSGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gcGFyc2Ugc3RyaW5nIG9iamVjdFxuICogcGF0aHMuIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbnRlcm5hbEdldFBhdGhWYWx1ZWAuXG4gKlxuICogICAgICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKCdteW9iamVjdC5wcm9wZXJ0eS5zdWJwcm9wJyk7XG4gKlxuICogIyMjIFBhdGhzOlxuICpcbiAqICogQ2FuIGJlIGluZmluaXRlbHkgZGVlcCBhbmQgbmVzdGVkLlxuICogKiBBcnJheXMgYXJlIGFsc28gdmFsaWQgdXNpbmcgdGhlIGZvcm1hbCBgbXlvYmplY3QuZG9jdW1lbnRbM10ucHJvcGVydHlgLlxuICogKiBMaXRlcmFsIGRvdHMgYW5kIGJyYWNrZXRzIChub3QgZGVsaW1pdGVyKSBtdXN0IGJlIGJhY2tzbGFzaC1lc2NhcGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwYXJzZWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBzdHIgPSBwYXRoLnJlcGxhY2UoLyhbXlxcXFxdKVxcWy9nLCAnJDEuWycpO1xuICB2YXIgcGFydHMgPSBzdHIubWF0Y2goLyhcXFxcXFwufFteLl0rPykrL2cpO1xuICByZXR1cm4gcGFydHMubWFwKGZ1bmN0aW9uIG1hcE1hdGNoZXModmFsdWUpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fFxuICAgICAgdmFsdWUgPT09ICdfX3Byb3RvX18nIHx8XG4gICAgICB2YWx1ZSA9PT0gJ3Byb3RvdHlwZSdcbiAgICApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHJlZ2V4cCA9IC9eXFxbKFxcZCspXFxdJC87XG4gICAgdmFyIG1BcnIgPSByZWdleHAuZXhlYyh2YWx1ZSk7XG4gICAgdmFyIHBhcnNlZCA9IG51bGw7XG4gICAgaWYgKG1BcnIpIHtcbiAgICAgIHBhcnNlZCA9IHsgaTogcGFyc2VGbG9hdChtQXJyWzFdKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSB7IHA6IHZhbHVlLnJlcGxhY2UoL1xcXFwoWy5bXFxdXSkvZywgJyQxJykgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9KTtcbn1cblxuLyogIVxuICogIyMgaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWRbLCBwYXRoRGVwdGhdKVxuICpcbiAqIEhlbHBlciBjb21wYW5pb24gZnVuY3Rpb24gZm9yIGAucGFyc2VQYXRoYCB0aGF0IHJldHVybnNcbiAqIHRoZSB2YWx1ZSBsb2NhdGVkIGF0IHRoZSBwYXJzZWQgYWRkcmVzcy5cbiAqXG4gKiAgICAgIHZhciB2YWx1ZSA9IGdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBzZWFyY2ggYWdhaW5zdFxuICogQHBhcmFtIHtPYmplY3R9IHBhcnNlZCBkZWZpbml0aW9uIGZyb20gYHBhcnNlUGF0aGAuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVwdGggKG5lc3RpbmcgbGV2ZWwpIG9mIHRoZSBwcm9wZXJ0eSB3ZSB3YW50IHRvIHJldHJpZXZlXG4gKiBAcmV0dXJucyB7T2JqZWN0fFVuZGVmaW5lZH0gdmFsdWVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgdmFyIHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICB2YXIgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyBwYXJzZWQubGVuZ3RoIDogcGF0aERlcHRoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICB2YXIgcGFydCA9IHBhcnNlZFtpXTtcbiAgICBpZiAodGVtcG9yYXJ5VmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQuaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQucF07XG4gICAgICB9XG5cbiAgICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICAgIHJlcyA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbi8qICFcbiAqICMjIGludGVybmFsU2V0UGF0aFZhbHVlKG9iaiwgdmFsdWUsIHBhcnNlZClcbiAqXG4gKiBDb21wYW5pb24gZnVuY3Rpb24gZm9yIGBwYXJzZVBhdGhgIHRoYXQgc2V0c1xuICogdGhlIHZhbHVlIGxvY2F0ZWQgYXQgYSBwYXJzZWQgYWRkcmVzcy5cbiAqXG4gKiAgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCAndmFsdWUnLCBwYXJzZWQpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdG8gc2VhcmNoIGFuZCBkZWZpbmUgb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgdG8gdXNlIHVwb24gc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkIGRlZmluaXRpb24gZnJvbSBgcGFyc2VQYXRoYFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWwsIHBhcnNlZCkge1xuICB2YXIgdGVtcE9iaiA9IG9iajtcbiAgdmFyIHBhdGhEZXB0aCA9IHBhcnNlZC5sZW5ndGg7XG4gIHZhciBwYXJ0ID0gbnVsbDtcbiAgLy8gSGVyZSB3ZSBpdGVyYXRlIHRocm91Z2ggZXZlcnkgcGFydCBvZiB0aGUgcGF0aFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhEZXB0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gbnVsbDtcbiAgICB2YXIgcHJvcFZhbCA9IG51bGw7XG4gICAgcGFydCA9IHBhcnNlZFtpXTtcblxuICAgIC8vIElmIGl0J3MgdGhlIGxhc3QgcGFydCBvZiB0aGUgcGF0aCwgd2Ugc2V0IHRoZSAncHJvcE5hbWUnIHZhbHVlIHdpdGggdGhlIHByb3BlcnR5IG5hbWVcbiAgICBpZiAoaSA9PT0gcGF0aERlcHRoIC0gMSkge1xuICAgICAgcHJvcE5hbWUgPSB0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJyA/IHBhcnQuaSA6IHBhcnQucDtcbiAgICAgIC8vIE5vdyB3ZSBzZXQgdGhlIHByb3BlcnR5IHdpdGggdGhlIG5hbWUgaGVsZCBieSAncHJvcE5hbWUnIG9uIG9iamVjdCB3aXRoIHRoZSBkZXNpcmVkIHZhbFxuICAgICAgdGVtcE9ialtwcm9wTmFtZV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFydC5wICE9PSAndW5kZWZpbmVkJyAmJiB0ZW1wT2JqW3BhcnQucF0pIHtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3BhcnQucF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFydC5pICE9PSAndW5kZWZpbmVkJyAmJiB0ZW1wT2JqW3BhcnQuaV0pIHtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3BhcnQuaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBvYmogZG9lc24ndCBoYXZlIHRoZSBwcm9wZXJ0eSB3ZSBjcmVhdGUgb25lIHdpdGggdGhhdCBuYW1lIHRvIGRlZmluZSBpdFxuICAgICAgdmFyIG5leHQgPSBwYXJzZWRbaSArIDFdO1xuICAgICAgLy8gSGVyZSB3ZSBzZXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdoaWNoIHdpbGwgYmUgZGVmaW5lZFxuICAgICAgcHJvcE5hbWUgPSB0eXBlb2YgcGFydC5wID09PSAndW5kZWZpbmVkJyA/IHBhcnQuaSA6IHBhcnQucDtcbiAgICAgIC8vIEhlcmUgd2UgZGVjaWRlIGlmIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBhbiBhcnJheSBvciBhIG5ldyBvYmplY3RcbiAgICAgIHByb3BWYWwgPSB0eXBlb2YgbmV4dC5wID09PSAndW5kZWZpbmVkJyA/IFtdIDoge307XG4gICAgICB0ZW1wT2JqW3Byb3BOYW1lXSA9IHByb3BWYWw7XG4gICAgICB0ZW1wT2JqID0gdGVtcE9ialtwcm9wTmFtZV07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogIyMjIC5nZXRQYXRoSW5mbyhvYmplY3QsIHBhdGgpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBwcm9wZXJ0eSBpbmZvIGluIGFuXG4gKiBvYmplY3QgZ2l2ZW4gYSBzdHJpbmcgcGF0aC5cbiAqXG4gKiBUaGUgcGF0aCBpbmZvIGNvbnNpc3RzIG9mIGFuIG9iamVjdCB3aXRoIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogKiBwYXJlbnQgLSBUaGUgcGFyZW50IG9iamVjdCBvZiB0aGUgcHJvcGVydHkgcmVmZXJlbmNlZCBieSBgcGF0aGBcbiAqICogbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBwcm9wZXJ0eSwgYSBudW1iZXIgaWYgaXQgd2FzIGFuIGFycmF5IGluZGV4ZXJcbiAqICogdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICogKiBleGlzdHMgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBleGlzdHMgb3Igbm90XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IGluZm9cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldFBhdGhJbmZvXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFBhdGhJbmZvKG9iaiwgcGF0aCkge1xuICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICB2YXIgbGFzdCA9IHBhcnNlZFtwYXJzZWQubGVuZ3RoIC0gMV07XG4gIHZhciBpbmZvID0ge1xuICAgIHBhcmVudDpcbiAgICAgIHBhcnNlZC5sZW5ndGggPiAxID9cbiAgICAgICAgaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6XG4gICAgICAgIG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCksXG4gIH07XG4gIGluZm8uZXhpc3RzID0gaGFzUHJvcGVydHkoaW5mby5wYXJlbnQsIGluZm8ubmFtZSk7XG5cbiAgcmV0dXJuIGluZm87XG59XG5cbi8qKlxuICogIyMjIC5nZXRQYXRoVmFsdWUob2JqZWN0LCBwYXRoKVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgdmFsdWVzIGluIGFuXG4gKiBvYmplY3QgZ2l2ZW4gYSBzdHJpbmcgcGF0aC5cbiAqXG4gKiAgICAgdmFyIG9iaiA9IHtcbiAqICAgICAgICAgcHJvcDE6IHtcbiAqICAgICAgICAgICAgIGFycjogWydhJywgJ2InLCAnYyddXG4gKiAgICAgICAgICAgLCBzdHI6ICdIZWxsbydcbiAqICAgICAgICAgfVxuICogICAgICAgLCBwcm9wMjoge1xuICogICAgICAgICAgICAgYXJyOiBbIHsgbmVzdGVkOiAnVW5pdmVyc2UnIH0gXVxuICogICAgICAgICAgICwgc3RyOiAnSGVsbG8gYWdhaW4hJ1xuICogICAgICAgICB9XG4gKiAgICAgfVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgdGhlIHJlc3VsdHMuXG4gKlxuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMS5zdHInKTsgLy8gSGVsbG9cbiAqICAgICBnZXRQYXRoVmFsdWUob2JqLCAncHJvcDEuYXR0WzJdJyk7IC8vIGJcbiAqICAgICBnZXRQYXRoVmFsdWUob2JqLCAncHJvcDIuYXJyWzBdLm5lc3RlZCcpOyAvLyBVbml2ZXJzZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB2YWx1ZSBvciBgdW5kZWZpbmVkYFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UGF0aFZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFBhdGhWYWx1ZShvYmosIHBhdGgpIHtcbiAgdmFyIGluZm8gPSBnZXRQYXRoSW5mbyhvYmosIHBhdGgpO1xuICByZXR1cm4gaW5mby52YWx1ZTtcbn1cblxuLyoqXG4gKiAjIyMgLnNldFBhdGhWYWx1ZShvYmplY3QsIHBhdGgsIHZhbHVlKVxuICpcbiAqIERlZmluZSB0aGUgdmFsdWUgaW4gYW4gb2JqZWN0IGF0IGEgZ2l2ZW4gc3RyaW5nIHBhdGguXG4gKlxuICogYGBganNcbiAqIHZhciBvYmogPSB7XG4gKiAgICAgcHJvcDE6IHtcbiAqICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICwgc3RyOiAnSGVsbG8nXG4gKiAgICAgfVxuICogICAsIHByb3AyOiB7XG4gKiAgICAgICAgIGFycjogWyB7IG5lc3RlZDogJ1VuaXZlcnNlJyB9IF1cbiAqICAgICAgICwgc3RyOiAnSGVsbG8gYWdhaW4hJ1xuICogICAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBUaGUgZm9sbG93aW5nIHdvdWxkIGJlIGFjY2VwdGFibGUuXG4gKlxuICogYGBganNcbiAqIHZhciBwcm9wZXJ0aWVzID0gcmVxdWlyZSgndGVhLXByb3BlcnRpZXMnKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AxLnN0cicsICdIZWxsbyBVbml2ZXJzZSEnKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AxLmFyclsyXScsICdCJyk7XG4gKiBwcm9wZXJ0aWVzLnNldChvYmosICdwcm9wMi5hcnJbMF0ubmVzdGVkLnZhbHVlJywgeyBoZWxsbzogJ3VuaXZlcnNlJyB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2V0UGF0aFZhbHVlKG9iaiwgcGF0aCwgdmFsKSB7XG4gIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgocGF0aCk7XG4gIGludGVybmFsU2V0UGF0aFZhbHVlKG9iaiwgdmFsLCBwYXJzZWQpO1xuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaGFzUHJvcGVydHk6IGhhc1Byb3BlcnR5LFxuICBnZXRQYXRoSW5mbzogZ2V0UGF0aEluZm8sXG4gIGdldFBhdGhWYWx1ZTogZ2V0UGF0aFZhbHVlLFxuICBzZXRQYXRoVmFsdWU6IHNldFBhdGhWYWx1ZSxcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmZsYWcob2JqZWN0LCBrZXksIFt2YWx1ZV0pXG4gKlxuICogR2V0IG9yIHNldCBhIGZsYWcgdmFsdWUgb24gYW4gb2JqZWN0LiBJZiBhXG4gKiB2YWx1ZSBpcyBwcm92aWRlZCBpdCB3aWxsIGJlIHNldCwgZWxzZSBpdCB3aWxsXG4gKiByZXR1cm4gdGhlIGN1cnJlbnRseSBzZXQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgaWZcbiAqIHRoZSB2YWx1ZSBpcyBub3Qgc2V0LlxuICpcbiAqICAgICB1dGlscy5mbGFnKHRoaXMsICdmb28nLCAnYmFyJyk7IC8vIHNldHRlclxuICogICAgIHV0aWxzLmZsYWcodGhpcywgJ2ZvbycpOyAvLyBnZXR0ZXIsIHJldHVybnMgYGJhcmBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IGNvbnN0cnVjdGVkIEFzc2VydGlvblxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgKG9wdGlvbmFsKVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZmxhZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICB2YXIgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBmbGFnc1trZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZsYWdzW2tleV07XG4gIH1cbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gdGVzdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcblxuLyoqXG4gKiAjIyMgLnRlc3Qob2JqZWN0LCBleHByZXNzaW9uKVxuICpcbiAqIFRlc3QgYW4gb2JqZWN0IGZvciBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgdGVzdFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGVzdChvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCAnbmVnYXRlJylcbiAgICAsIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufTtcbiIsICIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwudHlwZURldGVjdCA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuLyogIVxuICogdHlwZS1kZXRlY3RcbiAqIENvcHlyaWdodChjKSAyMDEzIGpha2UgbHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbnZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG52YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xpc3RcblxudmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnO1xudmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEV4aXN0cyA9IHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtNYXBFeGlzdHMgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgd2Vha1NldEV4aXN0cyA9IHR5cGVvZiBXZWFrU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciBkYXRhVmlld0V4aXN0cyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc2V0RW50cmllc0V4aXN0cyA9IHNldEV4aXN0cyAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xudmFyIG1hcEVudHJpZXNFeGlzdHMgPSBtYXBFeGlzdHMgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzZXRJdGVyYXRvclByb3RvdHlwZSA9IHNldEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBTZXQoKS5lbnRyaWVzKCkpO1xudmFyIG1hcEl0ZXJhdG9yUHJvdG90eXBlID0gbWFwRW50cmllc0V4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IE1hcCgpLmVudHJpZXMoKSk7XG52YXIgYXJyYXlJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbnZhciBhcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciBzdHJpbmdJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBTdHJpbmcucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUgPSBzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoJydbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciB0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCA9IDg7XG52YXIgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoID0gLTE7XG4vKipcbiAqICMjIyB0eXBlT2YgKG9iailcbiAqXG4gKiBVc2VzIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LFxuICogbm9ybWFsaXNpbmcgYmVoYXZpb3VyIGFjcm9zcyBlbmdpbmUgdmVyc2lvbnMgJiB3ZWxsIG9wdGltaXNlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAqIEByZXR1cm4ge1N0cmluZ30gb2JqZWN0IHR5cGVcbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHR5cGVEZXRlY3Qob2JqKSB7XG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzLDAzOSwwMzUgb3BzL3NlYyBcdTAwQjExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIFx1MDBCMTQuNTQlICg3NSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMSw2NTMsMTUzIG9wcy9zZWMgXHUwMEIxMS45MSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCA5LDk3OCw2NjAgb3BzL3NlYyBcdTAwQjExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIFx1MDBCMTEuNzMlICg3NyBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMzgsNTY0LDc5NiBvcHMvc2VjIFx1MDBCMTEuMTUlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMzEsMTQ4LDk0MCBvcHMvc2VjIFx1MDBCMTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIFx1MDBCMTEuOTAlICg3OCBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggMzIsMzYzLDM2OCBvcHMvc2VjIFx1MDBCMTEuMDclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMzEsMjk2LDg3MCBvcHMvc2VjIFx1MDBCMTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyBcdTAwQjExLjE3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiBQb3N0OlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDM2LDQyOCw5NjIgb3BzL3NlYyBcdTAwQjExLjM3JSAoODQgcnVucyBzYW1wbGVkKVxuICAgKi9cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cpYGBcbiAgICogIC0gTm9kZSA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBQaGFudG9tSlMgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIDExID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIEVkZ2UgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKWBgXG4gICAqICAtIENocm9tZSBXb3JrZXIgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCBXb3JrZXIgPT09IFwiW29iamVjdCBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBTYWZhcmkgV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgMTEgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgRWRnZSBXb3JrZXIgPT09IFwiW29iamVjdCBXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKi9cbiAgaWYgKG9iaiA9PT0gZ2xvYmFsT2JqZWN0KSB7XG4gICAgcmV0dXJuICdnbG9iYWwnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIGFycmF5IGxpdGVyYWwgICAgICB4IDIsODg4LDM1MiBvcHMvc2VjIFx1MDBCMTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIFx1MDBCMTAuOTYlICg4MSBydW5zIHNhbXBsZWQpXG4gICAqL1xuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShvYmopICYmXG4gICAgKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID09PSBmYWxzZSB8fCAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBvYmopKVxuICApIHtcbiAgICByZXR1cm4gJ0FycmF5JztcbiAgfVxuXG4gIC8vIE5vdCBjYWNoaW5nIGV4aXN0ZW5jZSBvZiBgd2luZG93YCBhbmQgcmVsYXRlZCBwcm9wZXJ0aWVzIGR1ZSB0byBwb3RlbnRpYWxcbiAgLy8gZm9yIGB3aW5kb3dgIHRvIGJlIHVuc2V0IGJlZm9yZSB0ZXN0cyBpbiBxdWFzaS1icm93c2VyIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHdpbmRvdyAhPT0gbnVsbCkge1xuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2xvY2F0aW9uKVxuICAgICAqIFdoYXRXRyBIVE1MJDcuNy4zIC0gVGhlIGBMb2NhdGlvbmAgaW50ZXJmYWNlXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cubG9jYXRpb24pYGBcbiAgICAgKiAgLSBJRSA8PTExID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICogIC0gSUUgRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYXRpb24gPT09ICdvYmplY3QnICYmIG9iaiA9PT0gd2luZG93LmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gJ0xvY2F0aW9uJztcbiAgICB9XG5cbiAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9jdW1lbnQpXG4gICAgICogV2hhdFdHIEhUTUwkMy4xLjEgLSBUaGUgYERvY3VtZW50YCBvYmplY3RcbiAgICAgKiBOb3RlOiBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBhZGhlciB0byB0aGUgVzNDIERPTSBMZXZlbCAyIHNwZWNcbiAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTI2ODA5MjY4KVxuICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgKiAgICAgICBib3RoIFREIGFuZCBUSCBlbGVtZW50cy4gV2hhdFdHIHNlcGFyYXRlcyB0aGVzZS5cbiAgICAgKiAgICAgICBXaGF0V0cgSFRNTCBzdGF0ZXM6XG4gICAgICogICAgICAgICA+IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIFdpbmRvdyBvYmplY3RzIG11c3QgYWxzbyBoYXZlIGFcbiAgICAgKiAgICAgICAgID4gd3JpdGFibGUsIGNvbmZpZ3VyYWJsZSwgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgbmFtZWRcbiAgICAgKiAgICAgICAgID4gSFRNTERvY3VtZW50IHdob3NlIHZhbHVlIGlzIHRoZSBEb2N1bWVudCBpbnRlcmZhY2Ugb2JqZWN0LlxuICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpYGBcbiAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IERvY3VtZW50XVwiXG4gICAgICogIC0gSUUgMTEgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5kb2N1bWVudCA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiAnRG9jdW1lbnQnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNtaW1ldHlwZWFycmF5KVxuICAgICAgICogV2hhdFdHIEhUTUwkOC42LjEuNSAtIFBsdWdpbnMgLSBJbnRlcmZhY2UgTWltZVR5cGVBcnJheVxuICAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuYXZpZ2F0b3IubWltZVR5cGVzKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNNaW1lVHlwZXNDb2xsZWN0aW9uXVwiXG4gICAgICAgKi9cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuICAgICAgICByZXR1cm4gJ01pbWVUeXBlQXJyYXknO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBQbHVnaW5BcnJheVxuICAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuYXZpZ2F0b3IucGx1Z2lucylgYFxuICAgICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IE1TUGx1Z2luc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMpIHtcbiAgICAgICAgcmV0dXJuICdQbHVnaW5BcnJheSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdvYmplY3QnKSAmJlxuICAgICAgICBvYmogaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3BsdWdpbmFycmF5KVxuICAgICAgKiBXaGF0V0cgSFRNTCQ0LjQuNCAtIFRoZSBgYmxvY2txdW90ZWAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFF1b3RlRWxlbWVudGBcbiAgICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdibG9ja3F1b3RlJykpYGBcbiAgICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IEhUTUxCbG9ja0VsZW1lbnRdXCJcbiAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdCTE9DS1FVT1RFJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxRdW90ZUVsZW1lbnQnO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNodG1sdGFibGVkYXRhY2VsbGVsZW1lbnQpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ0LjkuOSAtIFRoZSBgdGRgIGVsZW1lbnQgLSBJbnRlcmZhY2UgYEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdURCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQnO1xuICAgICAgfVxuXG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNodG1sdGFibGVoZWFkZXJjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnRgXG4gICAgICAgKiBOb3RlOiBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBhZGhlciB0byB0aGUgVzNDIERPTSBMZXZlbCAyIHNwZWNcbiAgICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtODI5MTUwNzUpXG4gICAgICAgKiAgICAgICB3aGljaCBzdWdnZXN0cyB0aGF0IGJyb3dzZXJzIHNob3VsZCB1c2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgZm9yXG4gICAgICAgKiAgICAgICBib3RoIFREIGFuZCBUSCBlbGVtZW50cy4gV2hhdFdHIHNlcGFyYXRlcyB0aGVzZS5cbiAgICAgICAqIFRlc3Q6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKVxuICAgICAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqL1xuICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnVEgnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgRmxvYXQ2NEFycmF5ICAgICAgIHggNjI1LDY0NCBvcHMvc2VjIFx1MDBCMTEuNTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCAxLDI3OSw4NTIgb3BzL3NlYyBcdTAwQjEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgXHUwMEIxMS45NSUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQxNkFycmF5ICAgICAgICB4IDEsMDA4LDM4MCBvcHMvc2VjIFx1MDBCMTIuMjUlICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCAxLDEyOCwwNDAgb3BzL3NlYyBcdTAwQjEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgXHUwMEIxMi44OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDE2QXJyYXkgICAgICAgICB4IDEsMTc2LDM0OCBvcHMvc2VjIFx1MDBCMTUuNzklICg4NiBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCAxLDA1OCw3MDcgb3BzL3NlYyBcdTAwQjE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgXHUwMEIxNC4yMCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgRmxvYXQ2NEFycmF5ICAgICAgIHggNywxMDUsNjcxIG9wcy9zZWMgXHUwMEIxMTMuNDclICg2NCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCA1LDg4Nyw5MTIgb3BzL3NlYyBcdTAwQjExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgXHUwMEIxMS43NiUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQxNkFycmF5ICAgICAgICB4IDYsNTU5LDc5NSBvcHMvc2VjIFx1MDBCMTEuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCA2LDQ2Myw5NjYgb3BzL3NlYyBcdTAwQjExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgXHUwMEIxMy40OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDE2QXJyYXkgICAgICAgICB4IDYsNTgzLDUxMSBvcHMvc2VjIFx1MDBCMTEuOTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCA2LDYwNiwwNzggb3BzL3NlYyBcdTAwQjExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgXHUwMEIxMS43NyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgdmFyIHN0cmluZ1RhZyA9IChzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmdUYWc7XG4gIH1cblxuICB2YXIgb2JqUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgcmVnZXggbGl0ZXJhbCAgICAgIHggMSw3NzIsMzg1IG9wcy9zZWMgXHUwMEIxMS44NSUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDIsMTQzLDYzNCBvcHMvc2VjIFx1MDBCMTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIFx1MDBCMTAuNjUlICg3OCBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAzLDkzMSwxMDggb3BzL3NlYyBcdTAwQjEwLjU4JSAoODQgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBSZWdFeHAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdSZWdFeHAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAyLDEzMCwwNzQgb3BzL3NlYyBcdTAwQjE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyBcdTAwQjExLjM1JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBEYXRlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0ZSc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtcHJvbWlzZS5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDI1LjQuNS40IC0gUHJvbWlzZS5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiUHJvbWlzZVwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFByb21pc2UucmVzb2x2ZSgpKWBgXG4gICAqICAtIENocm9tZSA8PTQ3ID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEVkZ2UgPD0yMCA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKiAgLSBGaXJlZm94IDI5LUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICogIC0gU2FmYXJpIDcuMS1MYXRlc3QgPT09IFwiW29iamVjdCBQcm9taXNlXVwiXG4gICAqL1xuICBpZiAocHJvbWlzZUV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFByb21pc2UucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdQcm9taXNlJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgc2V0ICAgICAgICAgICAgICAgIHggMiwyMjIsMTg2IG9wcy9zZWMgXHUwMEIxMS4zMSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgc2V0ICAgICAgICAgICAgICAgIHggNCw1NDUsODc5IG9wcy9zZWMgXHUwMEIxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIFx1MDBCMTEuNTklICg4MSBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDQsMTgzLDk0NSBvcHMvc2VjIFx1MDBCMTYuNTklICg4MiBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdNYXAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCAxLDMyMywyMjAgb3BzL3NlYyBcdTAwQjEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyBcdTAwQjEyLjAxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAod2Vha1NldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFdlYWtTZXQucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdXZWFrU2V0JztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha21hcCAgICAgICAgICAgIHggMSw1MDAsMjYwIG9wcy9zZWMgXHUwMEIxMi4wMiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgd2Vha21hcCAgICAgICAgICAgIHggMyw4ODEsMzg0IG9wcy9zZWMgXHUwMEIxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgXHUwMEIxMS42NyUgKDc2IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggNSw4MzgsMDAwIG9wcy9zZWMgXHUwMEIxMC45OSUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIHJldHVybiBPYmplY3RcbiAgICAucHJvdG90eXBlXG4gICAgLnRvU3RyaW5nXG4gICAgLmNhbGwob2JqKVxuICAgIC5zbGljZSh0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCwgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoKTtcbn1cblxucmV0dXJuIHR5cGVEZXRlY3Q7XG5cbn0pKSk7XG4iLCAiLyohXG4gKiBDaGFpIC0gZXhwZWN0VHlwZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5leHBlY3RUeXBlcyhvYmosIHR5cGVzKVxuICpcbiAqIEVuc3VyZXMgdGhhdCB0aGUgb2JqZWN0IGJlaW5nIHRlc3RlZCBhZ2FpbnN0IGlzIG9mIGEgdmFsaWQgdHlwZS5cbiAqXG4gKiAgICAgdXRpbHMuZXhwZWN0VHlwZXModGhpcywgWydhcnJheScsICdvYmplY3QnLCAnc3RyaW5nJ10pO1xuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9iaiBjb25zdHJ1Y3RlZCBBc3NlcnRpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHR5cGUgQSBsaXN0IG9mIGFsbG93ZWQgdHlwZXMgZm9yIHRoaXMgYXNzZXJ0aW9uXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBleHBlY3RUeXBlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG52YXIgQXNzZXJ0aW9uRXJyb3IgPSByZXF1aXJlKCdhc3NlcnRpb24tZXJyb3InKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICB2YXIgZmxhZ01zZyA9IGZsYWcob2JqLCAnbWVzc2FnZScpO1xuICB2YXIgc3NmaSA9IGZsYWcob2JqLCAnc3NmaScpO1xuXG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcblxuICBvYmogPSBmbGFnKG9iaiwgJ29iamVjdCcpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC50b0xvd2VyQ2FzZSgpOyB9KTtcbiAgdHlwZXMuc29ydCgpO1xuXG4gIC8vIFRyYW5zZm9ybXMgWydsb3JlbScsICdpcHN1bSddIGludG8gJ2EgbG9yZW0sIG9yIGFuIGlwc3VtJ1xuICB2YXIgc3RyID0gdHlwZXMubWFwKGZ1bmN0aW9uICh0LCBpbmRleCkge1xuICAgIHZhciBhcnQgPSB+WyAnYScsICdlJywgJ2knLCAnbycsICd1JyBdLmluZGV4T2YodC5jaGFyQXQoMCkpID8gJ2FuJyA6ICdhJztcbiAgICB2YXIgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gJ29yICcgOiAnJztcbiAgICByZXR1cm4gb3IgKyBhcnQgKyAnICcgKyB0O1xuICB9KS5qb2luKCcsICcpO1xuXG4gIHZhciBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKCF0eXBlcy5zb21lKGZ1bmN0aW9uIChleHBlY3RlZCkgeyByZXR1cm4gb2JqVHlwZSA9PT0gZXhwZWN0ZWQ7IH0pKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArICdvYmplY3QgdGVzdGVkIG11c3QgYmUgJyArIHN0ciArICcsIGJ1dCAnICsgb2JqVHlwZSArICcgZ2l2ZW4nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0QWN0dWFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0QWN0dWFsKG9iamVjdCwgW2FjdHVhbF0pXG4gKlxuICogUmV0dXJucyB0aGUgYGFjdHVhbGAgdmFsdWUgZm9yIGFuIEFzc2VydGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldEFjdHVhbFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0QWN0dWFsKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBnZXRGdW5jTmFtZSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldEZ1bmNOYW1lKGNvbnN0cnVjdG9yRm4pXG4gKlxuICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLlxuICogV2hlbiBhIG5vbi1mdW5jdGlvbiBpbnN0YW5jZSBpcyBwYXNzZWQsIHJldHVybnMgYG51bGxgLlxuICogVGhpcyBhbHNvIGluY2x1ZGVzIGEgcG9seWZpbGwgZnVuY3Rpb24gaWYgYGFGdW5jLm5hbWVgIGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBuYW1lIGdldEZ1bmNOYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG52YXIgdG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25OYW1lTWF0Y2ggPSAvXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCpbXig/OipcXC8pXStcXCpcXC9cXHMqKSooW15cXHNcXChcXC9dKykvO1xudmFyIG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoID0gNTEyO1xuZnVuY3Rpb24gZ2V0RnVuY05hbWUoYUZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBhRnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG5hbWUgPSAnJztcbiAgaWYgKHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFGdW5jLm5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZWZsZWN0XG4gICAgdmFyIGZ1bmN0aW9uU291cmNlID0gdG9TdHJpbmcuY2FsbChhRnVuYyk7XG4gICAgLy8gVG8gYXZvaWQgdW5jb25zdHJhaW5lZCByZXNvdXJjZSBjb25zdW1wdGlvbiBkdWUgdG8gcGF0aGFsb2dpY2FsbHkgbGFyZ2UgZnVuY3Rpb24gbmFtZXMsXG4gICAgLy8gd2UgbGltaXQgdGhlIGF2YWlsYWJsZSByZXR1cm4gdmFsdWUgdG8gYmUgbGVzcyB0aGFuIDUxMiBjaGFyYWN0ZXJzLlxuICAgIGlmIChmdW5jdGlvblNvdXJjZS5pbmRleE9mKCcoJykgPiBtYXhGdW5jdGlvblNvdXJjZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgcnVuIGEgcG9seWZpbGwgaWYgRnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgYG5hbWVgIHByb3BlcnR5IGFuZCBpZiBhRnVuYy5uYW1lIGlzIG5vdCBkZWZpbmVkXG4gICAgdmFyIG1hdGNoID0gZnVuY3Rpb25Tb3VyY2UubWF0Y2goZnVuY3Rpb25OYW1lTWF0Y2gpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbmFtZSA9IG1hdGNoWzFdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBgbmFtZWAgcHJvcGVydHkgd2UganVzdCB1c2UgaXRcbiAgICBuYW1lID0gYUZ1bmMubmFtZTtcbiAgfVxuXG4gIHJldHVybiBuYW1lO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEZ1bmNOYW1lO1xuIiwgIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwubG91cGUgPSB7fSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfYXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG5cbiAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgdmFyIGFuc2lDb2xvcnMgPSB7XG4gICAgYm9sZDogWycxJywgJzIyJ10sXG4gICAgZGltOiBbJzInLCAnMjInXSxcbiAgICBpdGFsaWM6IFsnMycsICcyMyddLFxuICAgIHVuZGVybGluZTogWyc0JywgJzI0J10sXG4gICAgLy8gNSAmIDYgYXJlIGJsaW5raW5nXG4gICAgaW52ZXJzZTogWyc3JywgJzI3J10sXG4gICAgaGlkZGVuOiBbJzgnLCAnMjgnXSxcbiAgICBzdHJpa2U6IFsnOScsICcyOSddLFxuICAgIC8vIDEwLTIwIGFyZSBmb250c1xuICAgIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICAgIGJsYWNrOiBbJzMwJywgJzM5J10sXG4gICAgcmVkOiBbJzMxJywgJzM5J10sXG4gICAgZ3JlZW46IFsnMzInLCAnMzknXSxcbiAgICB5ZWxsb3c6IFsnMzMnLCAnMzknXSxcbiAgICBibHVlOiBbJzM0JywgJzM5J10sXG4gICAgbWFnZW50YTogWyczNScsICczOSddLFxuICAgIGN5YW46IFsnMzYnLCAnMzknXSxcbiAgICB3aGl0ZTogWyczNycsICczOSddLFxuICAgIGJyaWdodGJsYWNrOiBbJzMwOzEnLCAnMzknXSxcbiAgICBicmlnaHRyZWQ6IFsnMzE7MScsICczOSddLFxuICAgIGJyaWdodGdyZWVuOiBbJzMyOzEnLCAnMzknXSxcbiAgICBicmlnaHR5ZWxsb3c6IFsnMzM7MScsICczOSddLFxuICAgIGJyaWdodGJsdWU6IFsnMzQ7MScsICczOSddLFxuICAgIGJyaWdodG1hZ2VudGE6IFsnMzU7MScsICczOSddLFxuICAgIGJyaWdodGN5YW46IFsnMzY7MScsICczOSddLFxuICAgIGJyaWdodHdoaXRlOiBbJzM3OzEnLCAnMzknXSxcbiAgICBncmV5OiBbJzkwJywgJzM5J11cbiAgfTtcbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBzcGVjaWFsOiAnY3lhbicsXG4gICAgbnVtYmVyOiAneWVsbG93JyxcbiAgICBiaWdpbnQ6ICd5ZWxsb3cnLFxuICAgIGJvb2xlYW46ICd5ZWxsb3cnLFxuICAgIHVuZGVmaW5lZDogJ2dyZXknLFxuICAgIG51bGw6ICdib2xkJyxcbiAgICBzdHJpbmc6ICdncmVlbicsXG4gICAgc3ltYm9sOiAnZ3JlZW4nLFxuICAgIGRhdGU6ICdtYWdlbnRhJyxcbiAgICByZWdleHA6ICdyZWQnXG4gIH07XG4gIHZhciB0cnVuY2F0b3IgPSAnXHUyMDI2JztcblxuICBmdW5jdGlvbiBjb2xvcmlzZSh2YWx1ZSwgc3R5bGVUeXBlKSB7XG4gICAgdmFyIGNvbG9yID0gYW5zaUNvbG9yc1tzdHlsZXNbc3R5bGVUeXBlXV0gfHwgYW5zaUNvbG9yc1tzdHlsZVR5cGVdO1xuXG4gICAgaWYgKCFjb2xvcikge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFx4MUJbXCIuY29uY2F0KGNvbG9yWzBdLCBcIm1cIikuY29uY2F0KFN0cmluZyh2YWx1ZSksIFwiXFx4MUJbXCIpLmNvbmNhdChjb2xvclsxXSwgXCJtXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXNlT3B0aW9ucygpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgIF9yZWYkc2hvd0hpZGRlbiA9IF9yZWYuc2hvd0hpZGRlbixcbiAgICAgICAgc2hvd0hpZGRlbiA9IF9yZWYkc2hvd0hpZGRlbiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHNob3dIaWRkZW4sXG4gICAgICAgIF9yZWYkZGVwdGggPSBfcmVmLmRlcHRoLFxuICAgICAgICBkZXB0aCA9IF9yZWYkZGVwdGggPT09IHZvaWQgMCA/IDIgOiBfcmVmJGRlcHRoLFxuICAgICAgICBfcmVmJGNvbG9ycyA9IF9yZWYuY29sb3JzLFxuICAgICAgICBjb2xvcnMgPSBfcmVmJGNvbG9ycyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbG9ycyxcbiAgICAgICAgX3JlZiRjdXN0b21JbnNwZWN0ID0gX3JlZi5jdXN0b21JbnNwZWN0LFxuICAgICAgICBjdXN0b21JbnNwZWN0ID0gX3JlZiRjdXN0b21JbnNwZWN0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRjdXN0b21JbnNwZWN0LFxuICAgICAgICBfcmVmJHNob3dQcm94eSA9IF9yZWYuc2hvd1Byb3h5LFxuICAgICAgICBzaG93UHJveHkgPSBfcmVmJHNob3dQcm94eSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHNob3dQcm94eSxcbiAgICAgICAgX3JlZiRtYXhBcnJheUxlbmd0aCA9IF9yZWYubWF4QXJyYXlMZW5ndGgsXG4gICAgICAgIG1heEFycmF5TGVuZ3RoID0gX3JlZiRtYXhBcnJheUxlbmd0aCA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfcmVmJG1heEFycmF5TGVuZ3RoLFxuICAgICAgICBfcmVmJGJyZWFrTGVuZ3RoID0gX3JlZi5icmVha0xlbmd0aCxcbiAgICAgICAgYnJlYWtMZW5ndGggPSBfcmVmJGJyZWFrTGVuZ3RoID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9yZWYkYnJlYWtMZW5ndGgsXG4gICAgICAgIF9yZWYkc2VlbiA9IF9yZWYuc2VlbixcbiAgICAgICAgc2VlbiA9IF9yZWYkc2VlbiA9PT0gdm9pZCAwID8gW10gOiBfcmVmJHNlZW4sXG4gICAgICAgIF9yZWYkdHJ1bmNhdGUgPSBfcmVmLnRydW5jYXRlLFxuICAgICAgICB0cnVuY2F0ZSA9IF9yZWYkdHJ1bmNhdGUgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX3JlZiR0cnVuY2F0ZSxcbiAgICAgICAgX3JlZiRzdHlsaXplID0gX3JlZi5zdHlsaXplLFxuICAgICAgICBzdHlsaXplID0gX3JlZiRzdHlsaXplID09PSB2b2lkIDAgPyBTdHJpbmcgOiBfcmVmJHN0eWxpemU7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgICBkZXB0aDogTnVtYmVyKGRlcHRoKSxcbiAgICAgIGNvbG9yczogQm9vbGVhbihjb2xvcnMpLFxuICAgICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICAgIHNob3dQcm94eTogQm9vbGVhbihzaG93UHJveHkpLFxuICAgICAgbWF4QXJyYXlMZW5ndGg6IE51bWJlcihtYXhBcnJheUxlbmd0aCksXG4gICAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICAgIHRydW5jYXRlOiBOdW1iZXIodHJ1bmNhdGUpLFxuICAgICAgc2Vlbjogc2VlbixcbiAgICAgIHN0eWxpemU6IHN0eWxpemVcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgICBvcHRpb25zLnN0eWxpemUgPSBjb2xvcmlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICBmdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIGxlbmd0aCkge1xuICAgIHZhciB0YWlsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVuY2F0b3I7XG4gICAgc3RyaW5nID0gU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHRhaWxMZW5ndGggPSB0YWlsLmxlbmd0aDtcbiAgICB2YXIgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICAgIHJldHVybiB0YWlsO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHN0cmluZy5zbGljZSgwLCBsZW5ndGggLSB0YWlsTGVuZ3RoKSkuY29uY2F0KHRhaWwpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICBmdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSkge1xuICAgIHZhciBzZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcsICc7XG4gICAgaW5zcGVjdEl0ZW0gPSBpbnNwZWN0SXRlbSB8fCBvcHRpb25zLmluc3BlY3Q7XG4gICAgdmFyIHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gICAgdmFyIG91dHB1dCA9ICcnO1xuICAgIHZhciBwZWVrID0gJyc7XG4gICAgdmFyIHRydW5jYXRlZCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICAgIHZhciBsYXN0ID0gaSArIDEgPT09IGxpc3QubGVuZ3RoO1xuICAgICAgdmFyIHNlY29uZFRvTGFzdCA9IGkgKyAyID09PSBsaXN0Lmxlbmd0aDtcbiAgICAgIHRydW5jYXRlZCA9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChsaXN0Lmxlbmd0aCAtIGksIFwiKVwiKTtcbiAgICAgIHZhciB2YWx1ZSA9IGxpc3RbaV07IC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVtYWluaW5nIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgYSBzZXBhcmF0b3Igb2YgYCwgYFxuXG4gICAgICBvcHRpb25zLnRydW5jYXRlID0gb3JpZ2luYWxMZW5ndGggLSBvdXRwdXQubGVuZ3RoIC0gKGxhc3QgPyAwIDogc2VwYXJhdG9yLmxlbmd0aCk7XG4gICAgICB2YXIgc3RyaW5nID0gcGVlayB8fCBpbnNwZWN0SXRlbSh2YWx1ZSwgb3B0aW9ucykgKyAobGFzdCA/ICcnIDogc2VwYXJhdG9yKTtcbiAgICAgIHZhciBuZXh0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0cmluZy5sZW5ndGg7XG4gICAgICB2YXIgdHJ1bmNhdGVkTGVuZ3RoID0gbmV4dExlbmd0aCArIHRydW5jYXRlZC5sZW5ndGg7IC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgZWxlbWVudCwgYW5kIGFkZGluZyBpdCB3b3VsZFxuICAgICAgLy8gdGFrZSB1cyBvdmVyIGxlbmd0aCwgYnV0IGFkZGluZyB0aGUgdHJ1bmNhdG9yIHdvdWxkbid0IC0gdGhlbiBicmVhayBub3dcblxuICAgICAgaWYgKGxhc3QgJiYgbmV4dExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG91dHB1dC5sZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoIDw9IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzbid0IHRoZSBsYXN0IG9yIHNlY29uZCB0byBsYXN0IGVsZW1lbnQgdG8gc2NhbixcbiAgICAgIC8vIGJ1dCB0aGUgc3RyaW5nIGlzIGFscmVhZHkgb3ZlciBsZW5ndGggdGhlbiBicmVhayBoZXJlXG5cblxuICAgICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFBlZWsgYXQgdGhlIG5leHQgc3RyaW5nIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGRcbiAgICAgIC8vIGJyZWFrIGVhcmx5IGJlZm9yZSBhZGRpbmcgdGhpcyBpdGVtIHRvIHRoZSBvdXRwdXRcblxuXG4gICAgICBwZWVrID0gbGFzdCA/ICcnIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/ICcnIDogc2VwYXJhdG9yKTsgLy8gSWYgd2UgaGF2ZSBvbmUgZWxlbWVudCBsZWZ0LCBidXQgdGhpcyBlbGVtZW50IGFuZFxuICAgICAgLy8gdGhlIG5leHQgdGFrZXMgb3ZlciBsZW5ndGgsIHRoZSBicmVhayBlYXJseVxuXG4gICAgICBpZiAoIWxhc3QgJiYgc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gc3RyaW5nOyAvLyBJZiB0aGUgbmV4dCBlbGVtZW50IHRha2VzIHVzIHRvIGxlbmd0aCAtXG4gICAgICAvLyBidXQgdGhlcmUgYXJlIG1vcmUgYWZ0ZXIgdGhhdCwgdGhlbiB3ZSBzaG91bGQgdHJ1bmNhdGUgbm93XG5cbiAgICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgICB0cnVuY2F0ZWQgPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQobGlzdC5sZW5ndGggLSBpIC0gMSwgXCIpXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdHJ1bmNhdGVkID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG91dHB1dCkuY29uY2F0KHRydW5jYXRlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gICAgaWYgKGtleS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLykpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSkucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFByb3BlcnR5KF9yZWYyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgICBrZXkgPSBfcmVmM1swXSxcbiAgICAgICAgdmFsdWUgPSBfcmVmM1sxXTtcblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gMjtcblxuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gcXVvdGVDb21wbGV4S2V5KGtleSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ICE9PSAnbnVtYmVyJykge1xuICAgICAga2V5ID0gXCJbXCIuY29uY2F0KG9wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpLCBcIl1cIik7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICAgIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5LCBcIjogXCIpLmNvbmNhdCh2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgICAvLyBPYmplY3Qua2V5cyB3aWxsIGFsd2F5cyBvdXRwdXQgdGhlIEFycmF5IGluZGljZXMgZmlyc3QsIHNvIHdlIGNhbiBzbGljZSBieVxuICAgIC8vIGBhcnJheS5sZW5ndGhgIHRvIGdldCBub24taW5kZXggcHJvcGVydGllc1xuICAgIHZhciBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuICdbXSc7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICAgIHZhciBsaXN0Q29udGVudHMgPSBpbnNwZWN0TGlzdChhcnJheSwgb3B0aW9ucyk7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gJyc7XG5cbiAgICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gW2tleSwgYXJyYXlba2V5XV07XG4gICAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJbIFwiLmNvbmNhdChsaXN0Q29udGVudHMpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzID8gXCIsIFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKSA6ICcnLCBcIiBdXCIpO1xuICB9XG5cbiAgLyogIVxuICAgKiBDaGFpIC0gZ2V0RnVuY05hbWUgdXRpbGl0eVxuICAgKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICAgKiBNSVQgTGljZW5zZWRcbiAgICovXG5cbiAgLyoqXG4gICAqICMjIyAuZ2V0RnVuY05hbWUoY29uc3RydWN0b3JGbilcbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLlxuICAgKiBXaGVuIGEgbm9uLWZ1bmN0aW9uIGluc3RhbmNlIGlzIHBhc3NlZCwgcmV0dXJucyBgbnVsbGAuXG4gICAqIFRoaXMgYWxzbyBpbmNsdWRlcyBhIHBvbHlmaWxsIGZ1bmN0aW9uIGlmIGBhRnVuYy5uYW1lYCBpcyBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQG5hbWUgZ2V0RnVuY05hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY3RcbiAgICogQG5hbWVzcGFjZSBVdGlsc1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB2YXIgdG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBmdW5jdGlvbk5hbWVNYXRjaCA9IC9cXHMqZnVuY3Rpb24oPzpcXHN8XFxzKlxcL1xcKlteKD86KlxcLyldK1xcKlxcL1xccyopKihbXlxcc1xcKFxcL10rKS87XG4gIHZhciBtYXhGdW5jdGlvblNvdXJjZUxlbmd0aCA9IDUxMjtcbiAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoYUZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGFGdW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlLm5hbWUgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBhRnVuYy5uYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZWZsZWN0XG4gICAgICB2YXIgZnVuY3Rpb25Tb3VyY2UgPSB0b1N0cmluZy5jYWxsKGFGdW5jKTtcbiAgICAgIC8vIFRvIGF2b2lkIHVuY29uc3RyYWluZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gZHVlIHRvIHBhdGhhbG9naWNhbGx5IGxhcmdlIGZ1bmN0aW9uIG5hbWVzLFxuICAgICAgLy8gd2UgbGltaXQgdGhlIGF2YWlsYWJsZSByZXR1cm4gdmFsdWUgdG8gYmUgbGVzcyB0aGFuIDUxMiBjaGFyYWN0ZXJzLlxuICAgICAgaWYgKGZ1bmN0aW9uU291cmNlLmluZGV4T2YoJygnKSA+IG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgICAgLy8gSGVyZSB3ZSBydW4gYSBwb2x5ZmlsbCBpZiBGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgbmFtZWAgcHJvcGVydHkgYW5kIGlmIGFGdW5jLm5hbWUgaXMgbm90IGRlZmluZWRcbiAgICAgIHZhciBtYXRjaCA9IGZ1bmN0aW9uU291cmNlLm1hdGNoKGZ1bmN0aW9uTmFtZU1hdGNoKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBuYW1lID0gbWF0Y2hbMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGBuYW1lYCBwcm9wZXJ0eSB3ZSBqdXN0IHVzZSBpdFxuICAgICAgbmFtZSA9IGFGdW5jLm5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICB2YXIgZ2V0RnVuY05hbWVfMSA9IGdldEZ1bmNOYW1lO1xuXG4gIHZhciBnZXRBcnJheU5hbWUgPSBmdW5jdGlvbiBnZXRBcnJheU5hbWUoYXJyYXkpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBOb2RlLmpzJyBCdWZmZXJzLCB3aGljaCByZXBvcnQgdG8gYmUgVWludDhBcnJheVxuICAgIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIGFycmF5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICByZXR1cm4gJ0J1ZmZlcic7XG4gICAgfVxuXG4gICAgaWYgKGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ10pIHtcbiAgICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRGdW5jTmFtZV8xKGFycmF5LmNvbnN0cnVjdG9yKTtcbiAgfTtcblxuICBmdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICsgNDsgLy8gT2JqZWN0LmtleXMgd2lsbCBhbHdheXMgb3V0cHV0IHRoZSBBcnJheSBpbmRpY2VzIGZpcnN0LCBzbyB3ZSBjYW4gc2xpY2UgYnlcbiAgICAvLyBgYXJyYXkubGVuZ3RoYCB0byBnZXQgbm9uLWluZGV4IHByb3BlcnRpZXNcblxuICAgIHZhciBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUsIFwiW11cIik7IC8vIEFzIHdlIGtub3cgVHlwZWRBcnJheXMgb25seSBjb250YWluIFVuc2lnbmVkIEludGVnZXJzLCB3ZSBjYW4gc2tpcCBpbnNwZWN0aW5nIGVhY2ggb25lIGFuZCBzaW1wbHlcbiAgICAvLyBzdHlsaXNlIHRoZSB0b1N0cmluZygpIHZhbHVlIG9mIHRoZW1cblxuICAgIHZhciBvdXRwdXQgPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdHJpbmcgPSBcIlwiLmNvbmNhdChvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoYXJyYXlbaV0sIG9wdGlvbnMudHJ1bmNhdGUpLCAnbnVtYmVyJykpLmNvbmNhdChpID09PSBhcnJheS5sZW5ndGggLSAxID8gJycgOiAnLCAnKTtcbiAgICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcblxuICAgICAgaWYgKGFycmF5W2ldICE9PSBhcnJheS5sZW5ndGggJiYgb3B0aW9ucy50cnVuY2F0ZSA8PSAzKSB7XG4gICAgICAgIG91dHB1dCArPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQoYXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxLCBcIilcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gJyc7XG5cbiAgICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gW2tleSwgYXJyYXlba2V5XV07XG4gICAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQobmFtZSwgXCJbIFwiKS5jb25jYXQob3V0cHV0KS5jb25jYXQocHJvcGVydHlDb250ZW50cyA/IFwiLCBcIi5jb25jYXQocHJvcGVydHlDb250ZW50cykgOiAnJywgXCIgXVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3REYXRlKGRhdGVPYmplY3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyaW5nUmVwcmVzZW50YXRpb24gPSBkYXRlT2JqZWN0LnRvSlNPTigpO1xuXG4gICAgaWYgKHN0cmluZ1JlcHJlc2VudGF0aW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ0ludmFsaWQgRGF0ZSc7XG4gICAgfVxuXG4gICAgdmFyIHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoJ1QnKTtcbiAgICB2YXIgZGF0ZSA9IHNwbGl0WzBdOyAvLyBJZiB3ZSBuZWVkIHRvIC0gdHJ1bmNhdGUgdGhlIHRpbWUgcG9ydGlvbiwgYnV0IG5ldmVyIHRoZSBkYXRlXG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiXCIuY29uY2F0KGRhdGUsIFwiVFwiKS5jb25jYXQodHJ1bmNhdGUoc3BsaXRbMV0sIG9wdGlvbnMudHJ1bmNhdGUgLSBkYXRlLmxlbmd0aCAtIDEpKSwgJ2RhdGUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RGdW5jdGlvbihmdW5jLCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSBnZXRGdW5jTmFtZV8xKGZ1bmMpO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdbRnVuY3Rpb25dJywgJ3NwZWNpYWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiW0Z1bmN0aW9uIFwiLmNvbmNhdCh0cnVuY2F0ZShuYW1lLCBvcHRpb25zLnRydW5jYXRlIC0gMTEpLCBcIl1cIiksICdzcGVjaWFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoX3JlZiwgb3B0aW9ucykge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBrZXkgPSBfcmVmMlswXSxcbiAgICAgICAgdmFsdWUgPSBfcmVmMlsxXTtcblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgICBrZXkgPSBvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gICAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiID0+IFwiKS5jb25jYXQodmFsdWUpO1xuICB9IC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IGBtYXAuZW50cmllcygpYFxuXG5cbiAgZnVuY3Rpb24gbWFwVG9FbnRyaWVzKG1hcCkge1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdE1hcChtYXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2l6ZSA9IG1hcC5zaXplIC0gMTtcblxuICAgIGlmIChzaXplIDw9IDApIHtcbiAgICAgIHJldHVybiAnTWFwe30nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgICByZXR1cm4gXCJNYXB7IFwiLmNvbmNhdChpbnNwZWN0TGlzdChtYXBUb0VudHJpZXMobWFwKSwgb3B0aW9ucywgaW5zcGVjdE1hcEVudHJ5KSwgXCIgfVwiKTtcbiAgfVxuXG4gIHZhciBpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpICE9PSBpO1xuICB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuXG5cbiAgZnVuY3Rpb24gaW5zcGVjdE51bWJlcihudW1iZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnTmFOJywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdJbmZpbml0eScsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJy1JbmZpbml0eScsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKDEgLyBudW1iZXIgPT09IEluZmluaXR5ID8gJyswJyA6ICctMCcsICdudW1iZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKG51bWJlciwgb3B0aW9ucy50cnVuY2F0ZSksICdudW1iZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RCaWdJbnQobnVtYmVyLCBvcHRpb25zKSB7XG4gICAgdmFyIG51bXMgPSB0cnVuY2F0ZShudW1iZXIudG9TdHJpbmcoKSwgb3B0aW9ucy50cnVuY2F0ZSAtIDEpO1xuICAgIGlmIChudW1zICE9PSB0cnVuY2F0b3IpIG51bXMgKz0gJ24nO1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVtcywgJ2JpZ2ludCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFJlZ0V4cCh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHZhciBmbGFncyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy8nKVsyXTtcbiAgICB2YXIgc291cmNlTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZSAtICgyICsgZmxhZ3MubGVuZ3RoKTtcbiAgICB2YXIgc291cmNlID0gdmFsdWUuc291cmNlO1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCIvXCIuY29uY2F0KHRydW5jYXRlKHNvdXJjZSwgc291cmNlTGVuZ3RoKSwgXCIvXCIpLmNvbmNhdChmbGFncyksICdyZWdleHAnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5RnJvbVNldChzZXQpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTZXQoc2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKHNldC5zaXplID09PSAwKSByZXR1cm4gJ1NldHt9JztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gICAgcmV0dXJuIFwiU2V0eyBcIi5jb25jYXQoaW5zcGVjdExpc3QoYXJyYXlGcm9tU2V0KHNldCksIG9wdGlvbnMpLCBcIiB9XCIpO1xuICB9XG5cbiAgdmFyIHN0cmluZ0VzY2FwZUNoYXJzID0gbmV3IFJlZ0V4cChcIlsnXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZcXFxcdTAwYWRcXFxcdTA2MDAtXFxcXHUwNjA0XFxcXHUwNzBmXFxcXHUxN2I0XFxcXHUxN2I1XCIgKyBcIlxcXFx1MjAwYy1cXFxcdTIwMGZcXFxcdTIwMjgtXFxcXHUyMDJmXFxcXHUyMDYwLVxcXFx1MjA2ZlxcXFx1ZmVmZlxcXFx1ZmZmMC1cXFxcdWZmZmZdXCIsICdnJyk7XG4gIHZhciBlc2NhcGVDaGFyYWN0ZXJzID0ge1xuICAgICdcXGInOiAnXFxcXGInLFxuICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICdcXHInOiAnXFxcXHInLFxuICAgIFwiJ1wiOiBcIlxcXFwnXCIsXG4gICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gIH07XG4gIHZhciBoZXggPSAxNjtcbiAgdmFyIHVuaWNvZGVMZW5ndGggPSA0O1xuXG4gIGZ1bmN0aW9uIGVzY2FwZShjaGFyKSB7XG4gICAgcmV0dXJuIGVzY2FwZUNoYXJhY3RlcnNbY2hhcl0gfHwgXCJcXFxcdVwiLmNvbmNhdChcIjAwMDBcIi5jb25jYXQoY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKGhleCkpLnNsaWNlKC11bmljb2RlTGVuZ3RoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuICAgIGlmIChzdHJpbmdFc2NhcGVDaGFycy50ZXN0KHN0cmluZykpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHN0cmluZ0VzY2FwZUNoYXJzLCBlc2NhcGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCInXCIuY29uY2F0KHRydW5jYXRlKHN0cmluZywgb3B0aW9ucy50cnVuY2F0ZSAtIDIpLCBcIidcIiksICdzdHJpbmcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTeW1ib2wodmFsdWUpIHtcbiAgICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2wucHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZGVzY3JpcHRpb24gPyBcIlN5bWJvbChcIi5jb25jYXQodmFsdWUuZGVzY3JpcHRpb24sIFwiKVwiKSA6ICdTeW1ib2woKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICB2YXIgZ2V0UHJvbWlzZVZhbHVlID0gZnVuY3Rpb24gZ2V0UHJvbWlzZVZhbHVlKCkge1xuICAgIHJldHVybiAnUHJvbWlzZXtcdTIwMjZ9JztcbiAgfTtcblxuICB0cnkge1xuICAgIHZhciBfcHJvY2VzcyRiaW5kaW5nID0gcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyksXG4gICAgICAgIGdldFByb21pc2VEZXRhaWxzID0gX3Byb2Nlc3MkYmluZGluZy5nZXRQcm9taXNlRGV0YWlscyxcbiAgICAgICAga1BlbmRpbmcgPSBfcHJvY2VzcyRiaW5kaW5nLmtQZW5kaW5nLFxuICAgICAgICBrUmVqZWN0ZWQgPSBfcHJvY2VzcyRiaW5kaW5nLmtSZWplY3RlZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGdldFByb21pc2VEZXRhaWxzKFByb21pc2UucmVzb2x2ZSgpKSkpIHtcbiAgICAgIGdldFByb21pc2VWYWx1ZSA9IGZ1bmN0aW9uIGdldFByb21pc2VWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2dldFByb21pc2VEZXRhaWxzID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpLFxuICAgICAgICAgICAgX2dldFByb21pc2VEZXRhaWxzMiA9IF9zbGljZWRUb0FycmF5KF9nZXRQcm9taXNlRGV0YWlscywgMiksXG4gICAgICAgICAgICBzdGF0ZSA9IF9nZXRQcm9taXNlRGV0YWlsczJbMF0sXG4gICAgICAgICAgICBpbm5lclZhbHVlID0gX2dldFByb21pc2VEZXRhaWxzMlsxXTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGtQZW5kaW5nKSB7XG4gICAgICAgICAgcmV0dXJuICdQcm9taXNlezxwZW5kaW5nPn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiUHJvbWlzZVwiLmNvbmNhdChzdGF0ZSA9PT0ga1JlamVjdGVkID8gJyEnIDogJycsIFwie1wiKS5jb25jYXQob3B0aW9ucy5pbnNwZWN0KGlubmVyVmFsdWUsIG9wdGlvbnMpLCBcIn1cIik7XG4gICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAobm90Tm9kZSkge1xuICAgIC8qIGlnbm9yZSAqL1xuICB9XG5cbiAgdmFyIGluc3BlY3RQcm9taXNlID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4gIGZ1bmN0aW9uIGluc3BlY3RPYmplY3Qob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSA6IFtdO1xuXG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwICYmIHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJ3t9JztcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gICAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMuc2Vlbi5pbmRleE9mKG9iamVjdCkgPj0gMCkge1xuICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIFtrZXksIG9iamVjdFtrZXldXTtcbiAgICB9KSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgICB2YXIgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIG9wdGlvbnMuc2Vlbi5wb3AoKTtcbiAgICB2YXIgc2VwID0gJyc7XG5cbiAgICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgICAgc2VwID0gJywgJztcbiAgICB9XG5cbiAgICByZXR1cm4gXCJ7IFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKS5jb25jYXQoc2VwKS5jb25jYXQoc3ltYm9sQ29udGVudHMsIFwiIH1cIik7XG4gIH1cblxuICB2YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbiAgZnVuY3Rpb24gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSAnJztcblxuICAgIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgICAgbmFtZSA9IHZhbHVlW3RvU3RyaW5nVGFnXTtcbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZSB8fCBnZXRGdW5jTmFtZV8xKHZhbHVlLmNvbnN0cnVjdG9yKTsgLy8gQmFiZWwgdHJhbnNmb3JtcyBhbm9ueW1vdXMgY2xhc3NlcyB0byB0aGUgbmFtZSBgX2NsYXNzYFxuXG4gICAgaWYgKCFuYW1lIHx8IG5hbWUgPT09ICdfY2xhc3MnKSB7XG4gICAgICBuYW1lID0gJzxBbm9ueW1vdXMgQ2xhc3M+JztcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lKS5jb25jYXQoaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucykpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJ0FyZ3VtZW50c1tdJztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICAgIHJldHVybiBcIkFyZ3VtZW50c1sgXCIuY29uY2F0KGluc3BlY3RMaXN0KGFyZ3MsIG9wdGlvbnMpLCBcIiBdXCIpO1xuICB9XG5cbiAgdmFyIGVycm9yS2V5cyA9IFsnc3RhY2snLCAnbGluZScsICdjb2x1bW4nLCAnbmFtZScsICdtZXNzYWdlJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnY29sdW1uTnVtYmVyJywgJ251bWJlcicsICdkZXNjcmlwdGlvbiddO1xuICBmdW5jdGlvbiBpbnNwZWN0T2JqZWN0JDEoZXJyb3IsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGVycm9yS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuICAgIHZhciBuYW1lID0gZXJyb3IubmFtZTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICAgIHZhciBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BlcnRpZXMudW5zaGlmdCgnbWVzc2FnZScpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlID8gXCI6IFwiLmNvbmNhdChtZXNzYWdlKSA6ICcnO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbWVzc2FnZS5sZW5ndGggKyA1O1xuICAgIHZhciBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIFtrZXksIGVycm9yW2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KHByb3BlcnR5Q29udGVudHMgPyBcIiB7IFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzLCBcIiB9XCIpIDogJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEF0dHJpYnV0ZShfcmVmLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYyWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSAzO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShrZXksICd5ZWxsb3cnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShrZXksICd5ZWxsb3cnKSwgXCI9XCIpLmNvbmNhdChvcHRpb25zLnN0eWxpemUoXCJcXFwiXCIuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksICdzdHJpbmcnKSk7XG4gIH1cbiAgZnVuY3Rpb24gaW5zcGVjdEhUTUxDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdEhUTUwsICdcXG4nKTtcbiAgfVxuICBmdW5jdGlvbiBpbnNwZWN0SFRNTChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7XG4gICAgdmFyIG5hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgaGVhZCA9IG9wdGlvbnMuc3R5bGl6ZShcIjxcIi5jb25jYXQobmFtZSksICdzcGVjaWFsJyk7XG4gICAgdmFyIGhlYWRDbG9zZSA9IG9wdGlvbnMuc3R5bGl6ZShcIj5cIiwgJ3NwZWNpYWwnKTtcbiAgICB2YXIgdGFpbCA9IG9wdGlvbnMuc3R5bGl6ZShcIjwvXCIuY29uY2F0KG5hbWUsIFwiPlwiKSwgJ3NwZWNpYWwnKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnR5Q29udGVudHMgKz0gJyAnO1xuICAgICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0QXR0cmlidXRlLCAnICcpO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gcHJvcGVydHlDb250ZW50cy5sZW5ndGg7XG4gICAgdmFyIHRydW5jYXRlID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSBpbnNwZWN0SFRNTENvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG5cbiAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gdHJ1bmNhdGUpIHtcbiAgICAgIGNoaWxkcmVuID0gXCJcIi5jb25jYXQodHJ1bmNhdG9yLCBcIihcIikuY29uY2F0KGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCBcIilcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGhlYWQpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKS5jb25jYXQoaGVhZENsb3NlKS5jb25jYXQoY2hpbGRyZW4pLmNvbmNhdCh0YWlsKTtcbiAgfVxuXG4gIHZhciBzeW1ib2xzU3VwcG9ydGVkID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJztcbiAgdmFyIGNoYWlJbnNwZWN0ID0gc3ltYm9sc1N1cHBvcnRlZCA/IFN5bWJvbC5mb3IoJ2NoYWkvaW5zcGVjdCcpIDogJ0BAY2hhaS9pbnNwZWN0JztcbiAgdmFyIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICB2YXIgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbiAgICBub2RlSW5zcGVjdCA9IG5vZGVVdGlsLmluc3BlY3QgPyBub2RlVXRpbC5pbnNwZWN0LmN1c3RvbSA6IGZhbHNlO1xuICB9IGNhdGNoIChub05vZGVJbnNwZWN0KSB7XG4gICAgbm9kZUluc3BlY3QgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEZha2VNYXAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgIHRoaXMua2V5ID0gJ2NoYWkvbG91cGVfXycgKyBNYXRoLnJhbmRvbSgpICsgRGF0ZS5ub3coKTtcbiAgfVxuXG4gIEZha2VNYXAucHJvdG90eXBlID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4ga2V5W3RoaXMua2V5XTtcbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5rZXkgaW4ga2V5O1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMua2V5LCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yTWFwID0gbmV3ICh0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBGYWtlTWFwKSgpO1xuICB2YXIgc3RyaW5nVGFnTWFwID0ge307XG4gIHZhciBiYXNlVHlwZXNNYXAgPSB7XG4gICAgdW5kZWZpbmVkOiBmdW5jdGlvbiB1bmRlZmluZWQkMSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICAgIH0sXG4gICAgbnVsbDogZnVuY3Rpb24gX251bGwodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVsbCwgJ251bGwnKTtcbiAgICB9LFxuICAgIGJvb2xlYW46IGZ1bmN0aW9uIGJvb2xlYW4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodmFsdWUsICdib29sZWFuJyk7XG4gICAgfSxcbiAgICBCb29sZWFuOiBmdW5jdGlvbiBCb29sZWFuKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHZhbHVlLCAnYm9vbGVhbicpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICAgIE51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgICBiaWdpbnQ6IGluc3BlY3RCaWdJbnQsXG4gICAgQmlnSW50OiBpbnNwZWN0QmlnSW50LFxuICAgIHN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgICBTdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gICAgZnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgICBGdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICAgIHN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgICAvLyBBIFN5bWJvbCBwb2x5ZmlsbCB3aWxsIHJldHVybiBgU3ltYm9sYCBub3QgYHN5bWJvbGAgZnJvbSB0eXBlZGV0ZWN0XG4gICAgU3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAgIEFycmF5OiBpbnNwZWN0QXJyYXksXG4gICAgRGF0ZTogaW5zcGVjdERhdGUsXG4gICAgTWFwOiBpbnNwZWN0TWFwLFxuICAgIFNldDogaW5zcGVjdFNldCxcbiAgICBSZWdFeHA6IGluc3BlY3RSZWdFeHAsXG4gICAgUHJvbWlzZTogaW5zcGVjdFByb21pc2UsXG4gICAgLy8gV2Vha1NldCwgV2Vha01hcCBhcmUgdG90YWxseSBvcGFxdWUgdG8gdXNcbiAgICBXZWFrU2V0OiBmdW5jdGlvbiBXZWFrU2V0KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdXZWFrU2V0e1x1MjAyNn0nLCAnc3BlY2lhbCcpO1xuICAgIH0sXG4gICAgV2Vha01hcDogZnVuY3Rpb24gV2Vha01hcCh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnV2Vha01hcHtcdTIwMjZ9JywgJ3NwZWNpYWwnKTtcbiAgICB9LFxuICAgIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgICBJbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBJbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBVaW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEZsb2F0MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBHZW5lcmF0b3I6IGZ1bmN0aW9uIEdlbmVyYXRvcigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIERhdGFWaWV3OiBmdW5jdGlvbiBEYXRhVmlldygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIEFycmF5QnVmZmVyOiBmdW5jdGlvbiBBcnJheUJ1ZmZlcigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIEVycm9yOiBpbnNwZWN0T2JqZWN0JDEsXG4gICAgSFRNTENvbGxlY3Rpb246IGluc3BlY3RIVE1MQ29sbGVjdGlvbixcbiAgICBOb2RlTGlzdDogaW5zcGVjdEhUTUxDb2xsZWN0aW9uXG4gIH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cbiAgdmFyIGluc3BlY3RDdXN0b20gPSBmdW5jdGlvbiBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlKSB7XG4gICAgaWYgKGNoYWlJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtjaGFpSW5zcGVjdF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZVtjaGFpSW5zcGVjdF0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVJbnNwZWN0ICYmIG5vZGVJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtub2RlSW5zcGVjdF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZVtub2RlSW5zcGVjdF0ob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdpbnNwZWN0JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmluc3BlY3Qob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdjb25zdHJ1Y3RvcicgaW4gdmFsdWUgJiYgY29uc3RydWN0b3JNYXAuaGFzKHZhbHVlLmNvbnN0cnVjdG9yKSkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTWFwLmdldCh2YWx1ZS5jb25zdHJ1Y3RvcikodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdUYWdNYXBbdHlwZV0pIHtcbiAgICAgIHJldHVybiBzdHJpbmdUYWdNYXBbdHlwZV0odmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICB2YXIgdG9TdHJpbmckMSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cbiAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgICAgY3VzdG9tSW5zcGVjdCA9IF9vcHRpb25zLmN1c3RvbUluc3BlY3Q7XG4gICAgdmFyIHR5cGUgPSB2YWx1ZSA9PT0gbnVsbCA/ICdudWxsJyA6IF90eXBlb2YodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0eXBlID0gdG9TdHJpbmckMS5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XG4gICAgfSAvLyBJZiBpdCBpcyBhIGJhc2UgdmFsdWUgdGhhdCB3ZSBhbHJlYWR5IHN1cHBvcnQsIHRoZW4gdXNlIExvdXBlJ3MgaW5zcGVjdG9yXG5cblxuICAgIGlmIChiYXNlVHlwZXNNYXBbdHlwZV0pIHtcbiAgICAgIHJldHVybiBiYXNlVHlwZXNNYXBbdHlwZV0odmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gSWYgYG9wdGlvbnMuY3VzdG9tSW5zcGVjdGAgaXMgc2V0IHRvIHRydWUgdGhlbiB0cnkgdG8gdXNlIHRoZSBjdXN0b20gaW5zcGVjdG9yXG5cblxuICAgIGlmIChjdXN0b21JbnNwZWN0ICYmIHZhbHVlKSB7XG4gICAgICB2YXIgb3V0cHV0ID0gaW5zcGVjdEN1c3RvbSh2YWx1ZSwgb3B0aW9ucywgdHlwZSk7XG5cbiAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gb3V0cHV0O1xuICAgICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlOyAvLyBJZiBpdCdzIGEgcGxhaW4gT2JqZWN0IHRoZW4gdXNlIExvdXBlJ3MgaW5zcGVjdG9yXG5cbiAgICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIFNwZWNpZmljYWxseSBhY2NvdW50IGZvciBIVE1MRWxlbWVudHNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICgnY29uc3RydWN0b3InIGluIHZhbHVlKSB7XG4gICAgICAvLyBJZiBpdCBpcyBhIGNsYXNzLCBpbnNwZWN0IGl0IGxpa2UgYW4gb2JqZWN0IGJ1dCBhZGQgdGhlIGNvbnN0cnVjdG9yIG5hbWVcbiAgICAgIGlmICh2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSAvLyBJZiBpdCBpcyBhbiBvYmplY3Qgd2l0aCBhbiBhbm9ueW1vdXMgcHJvdG90eXBlLCBkaXNwbGF5IGl0IGFzIGFuIG9iamVjdC5cblxuXG4gICAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfSAvLyBsYXN0IGNoYW5jZSB0byBjaGVjayBpZiBpdCdzIGFuIG9iamVjdFxuXG5cbiAgICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIFdlIGhhdmUgcnVuIG91dCBvZiBvcHRpb25zISBKdXN0IHN0cmluZ2lmeSB0aGUgdmFsdWVcblxuXG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlKTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlckNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLCBpbnNwZWN0b3IpIHtcbiAgICBpZiAoY29uc3RydWN0b3JNYXAuaGFzKGNvbnN0cnVjdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yTWFwLnNldChjb25zdHJ1Y3RvciwgaW5zcGVjdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlclN0cmluZ1RhZyhzdHJpbmdUYWcsIGluc3BlY3Rvcikge1xuICAgIGlmIChzdHJpbmdUYWcgaW4gc3RyaW5nVGFnTWFwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RyaW5nVGFnTWFwW3N0cmluZ1RhZ10gPSBpbnNwZWN0b3I7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGN1c3RvbSA9IGNoYWlJbnNwZWN0O1xuXG4gIGV4cG9ydHMuY3VzdG9tID0gY3VzdG9tO1xuICBleHBvcnRzLmRlZmF1bHQgPSBpbnNwZWN0O1xuICBleHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuICBleHBvcnRzLnJlZ2lzdGVyQ29uc3RydWN0b3IgPSByZWdpc3RlckNvbnN0cnVjdG9yO1xuICBleHBvcnRzLnJlZ2lzdGVyU3RyaW5nVGFnID0gcmVnaXN0ZXJTdHJpbmdUYWc7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5pbmNsdWRlU3RhY2tcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBzdGFjayB0cmFjZVxuICAgKiBpcyBpbmNsdWRlZCBpbiBBc3NlcnRpb24gZXJyb3IgbWVzc2FnZS4gRGVmYXVsdCBvZiBmYWxzZVxuICAgKiBzdXBwcmVzc2VzIHN0YWNrIHRyYWNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrID0gdHJ1ZTsgIC8vIGVuYWJsZSBzdGFjayBvbiBlcnJvclxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGluY2x1ZGVTdGFjazogZmFsc2UsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgc2hvd0RpZmY6IHRydWUsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGRcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIHNldHMgbGVuZ3RoIHRocmVzaG9sZCBmb3IgYWN0dWFsIGFuZFxuICAgKiBleHBlY3RlZCB2YWx1ZXMgaW4gYXNzZXJ0aW9uIGVycm9ycy4gSWYgdGhpcyB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIGZvclxuICAgKiBleGFtcGxlIGZvciBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZ1xuICAgKiBsaWtlIGBbIEFycmF5KDMpIF1gIG9yIGB7IE9iamVjdCAocHJvcDEsIHByb3AyKSB9YC5cbiAgICpcbiAgICogU2V0IGl0IHRvIHplcm8gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0cnVuY2F0aW5nIGFsdG9nZXRoZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VyZnVsIHdoZW4gZG9pbmcgYXNzZXJ0aW9ucyBvbiBhcnJheXM6IGhhdmluZyB0aGlzXG4gICAqIHNldCB0byBhIHJlYXNvbmFibGUgbGFyZ2UgdmFsdWUgbWFrZXMgdGhlIGZhaWx1cmUgbWVzc2FnZXMgcmVhZGlseVxuICAgKiBpbnNwZWN0YWJsZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID0gMDsgIC8vIGRpc2FibGUgdHJ1bmNhdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgdHJ1bmNhdGVUaHJlc2hvbGQ6IDQwLFxuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnVzZVByb3h5XG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIGlmIGNoYWkgd2lsbCB1c2UgYSBQcm94eSB0byB0aHJvd1xuICAgKiBhbiBlcnJvciB3aGVuIGEgbm9uLWV4aXN0ZW50IHByb3BlcnR5IGlzIHJlYWQsIHdoaWNoIHByb3RlY3RzIHVzZXJzXG4gICAqIGZyb20gdHlwb3Mgd2hlbiB1c2luZyBwcm9wZXJ0eS1iYXNlZCBhc3NlcnRpb25zLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy51c2VQcm94eSA9IGZhbHNlOyAgLy8gZGlzYWJsZSB1c2Ugb2YgUHJveHlcbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyB2YWx1ZVxuICAgKiBpbiBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IHByb3hpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgdXNlUHJveHk6IHRydWUsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgcHJveHlFeGNsdWRlZEtleXM6IFsndGhlbicsICdjYXRjaCcsICdpbnNwZWN0JywgJ3RvSlNPTiddLFxuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgcmV0dXJuIGNoYWkudXRpbC5lcWwoZXhwZWN0ZWQsIGFjdHVhbCwge1xuICAgKiAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgIH1cbiAgICogICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBkZWVwRXF1YWw6IG51bGxcblxufTtcbiIsICIvLyBUaGlzIGlzIChhbG1vc3QpIGRpcmVjdGx5IGZyb20gTm9kZS5qcyB1dGlsc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvZjhjMzM1ZDBjYWY0N2YxNmQzMTQxM2Y4OWFhMjhlZGEzODc4ZTNhYS9saWIvdXRpbC5qc1xuXG52YXIgZ2V0TmFtZSA9IHJlcXVpcmUoJ2dldC1mdW5jLW5hbWUnKTtcbnZhciBsb3VwZSA9IHJlcXVpcmUoJ2xvdXBlJyk7XG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zcGVjdDtcblxuLyoqXG4gKiAjIyMgLmluc3BlY3Qob2JqLCBbc2hvd0hpZGRlbl0sIFtkZXB0aF0sIFtjb2xvcnNdKVxuICpcbiAqIEVjaG9lcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJpZXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2hvd0hpZGRlbiBGbGFnIHRoYXQgc2hvd3MgaGlkZGVuIChub3QgZW51bWVyYWJsZSlcbiAqICAgIHByb3BlcnRpZXMgb2Ygb2JqZWN0cy4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCBEZXB0aCBpbiB3aGljaCB0byBkZXNjZW5kIGluIG9iamVjdC4gRGVmYXVsdCBpcyAyLlxuICogQHBhcmFtIHtCb29sZWFufSBjb2xvcnMgRmxhZyB0byB0dXJuIG9uIEFOU0kgZXNjYXBlIGNvZGVzIHRvIGNvbG9yIHRoZVxuICogICAgb3V0cHV0LiBEZWZhdWx0IGlzIGZhbHNlIChubyBjb2xvcmluZykuXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBpbnNwZWN0XG4gKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGNvbG9yczogY29sb3JzLFxuICAgIGRlcHRoOiAodHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJyA/IDIgOiBkZXB0aCksXG4gICAgc2hvd0hpZGRlbjogc2hvd0hpZGRlbixcbiAgICB0cnVuY2F0ZTogY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID8gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkIDogSW5maW5pdHksXG4gIH07XG4gIHJldHVybiBsb3VwZS5pbnNwZWN0KG9iaiwgb3B0aW9ucyk7XG59XG4iLCAiLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGluc3BlY3QgPSByZXF1aXJlKCcuL2luc3BlY3QnKTtcbnZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcblxuLyoqXG4gKiAjIyMgLm9iakRpc3BsYXkob2JqZWN0KVxuICpcbiAqIERldGVybWluZXMgaWYgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG1hdGNoZXNcbiAqIGNyaXRlcmlhIHRvIGJlIGluc3BlY3RlZCBpbi1saW5lIGZvciBlcnJvclxuICogbWVzc2FnZXMgb3Igc2hvdWxkIGJlIHRydW5jYXRlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBqYXZhc2NyaXB0IG9iamVjdCB0byBpbnNwZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmdpZmllZCBvYmplY3RcbiAqIEBuYW1lIG9iakRpc3BsYXlcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvYmpEaXNwbGF5KG9iaikge1xuICB2YXIgc3RyID0gaW5zcGVjdChvYmopXG4gICAgLCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG5cbiAgaWYgKGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCAmJiBzdHIubGVuZ3RoID49IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCkge1xuICAgIGlmICh0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICByZXR1cm4gIW9iai5uYW1lIHx8IG9iai5uYW1lID09PSAnJ1xuICAgICAgICA/ICdbRnVuY3Rpb25dJ1xuICAgICAgICA6ICdbRnVuY3Rpb246ICcgKyBvYmoubmFtZSArICddJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybiAnWyBBcnJheSgnICsgb2JqLmxlbmd0aCArICcpIF0nO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAsIGtzdHIgPSBrZXlzLmxlbmd0aCA+IDJcbiAgICAgICAgICA/IGtleXMuc3BsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnLCAuLi4nXG4gICAgICAgICAgOiBrZXlzLmpvaW4oJywgJyk7XG4gICAgICByZXR1cm4gJ3sgT2JqZWN0ICgnICsga3N0ciArICcpIH0nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJylcbiAgLCBnZXRBY3R1YWwgPSByZXF1aXJlKCcuL2dldEFjdHVhbCcpXG4gICwgb2JqRGlzcGxheSA9IHJlcXVpcmUoJy4vb2JqRGlzcGxheScpO1xuXG4vKipcbiAqICMjIyAuZ2V0TWVzc2FnZShvYmplY3QsIG1lc3NhZ2UsIG5lZ2F0ZU1lc3NhZ2UpXG4gKlxuICogQ29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGZsYWdzXG4gKiBhbmQgdGVtcGxhdGUgdGFncy4gVGVtcGxhdGUgdGFncyB3aWxsIHJldHVyblxuICogYSBzdHJpbmdpZmllZCBpbnNwZWN0aW9uIG9mIHRoZSBvYmplY3QgcmVmZXJlbmNlZC5cbiAqXG4gKiBNZXNzYWdlIHRlbXBsYXRlIHRhZ3M6XG4gKiAtIGAje3RoaXN9YCBjdXJyZW50IGFzc2VydGVkIG9iamVjdFxuICogLSBgI3thY3R9YCBhY3R1YWwgdmFsdWVcbiAqIC0gYCN7ZXhwfWAgZXhwZWN0ZWQgdmFsdWVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE1lc3NhZ2VcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRNZXNzYWdlKG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosICduZWdhdGUnKVxuICAgICwgdmFsID0gZmxhZyhvYmosICdvYmplY3QnKVxuICAgICwgZXhwZWN0ZWQgPSBhcmdzWzNdXG4gICAgLCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKVxuICAgICwgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV1cbiAgICAsIGZsYWdNc2cgPSBmbGFnKG9iaiwgJ21lc3NhZ2UnKTtcblxuICBpZih0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgJyc7XG4gIG1zZyA9IG1zZ1xuICAgIC5yZXBsYWNlKC8jXFx7dGhpc1xcfS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmpEaXNwbGF5KHZhbCk7IH0pXG4gICAgLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqRGlzcGxheShhY3R1YWwpOyB9KVxuICAgIC5yZXBsYWNlKC8jXFx7ZXhwXFx9L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iakRpc3BsYXkoZXhwZWN0ZWQpOyB9KTtcblxuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnICsgbXNnIDogbXNnO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSB0cmFuc2ZlckZsYWdzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCA9IHRydWUpXG4gKlxuICogVHJhbnNmZXIgYWxsIHRoZSBmbGFncyBmb3IgYGFzc2VydGlvbmAgdG8gYG9iamVjdGAuIElmXG4gKiBgaW5jbHVkZUFsbGAgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIGJhc2UgQ2hhaVxuICogYXNzZXJ0aW9uIGZsYWdzIChuYW1lbHkgYG9iamVjdGAsIGBzc2ZpYCwgYGxvY2tTc2ZpYCxcbiAqIGFuZCBgbWVzc2FnZWApIHdpbGwgbm90IGJlIHRyYW5zZmVycmVkLlxuICpcbiAqXG4gKiAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAqICAgICB1dGlscy50cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgbmV3QXNzZXJ0aW9uKTtcbiAqXG4gKiAgICAgdmFyIGFub3RoZXJBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKG15T2JqKTtcbiAqICAgICB1dGlscy50cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgYW5vdGhlckFzc2VydGlvbiwgZmFsc2UpO1xuICpcbiAqIEBwYXJhbSB7QXNzZXJ0aW9ufSBhc3NlcnRpb24gdGhlIGFzc2VydGlvbiB0byB0cmFuc2ZlciB0aGUgZmxhZ3MgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0aGUgb2JqZWN0IHRvIHRyYW5zZmVyIHRoZSBmbGFncyB0bzsgdXN1YWxseSBhIG5ldyBhc3NlcnRpb25cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkZUFsbFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgdHJhbnNmZXJGbGFnc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgb2JqZWN0LCBpbmNsdWRlQWxsKSB7XG4gIHZhciBmbGFncyA9IGFzc2VydGlvbi5fX2ZsYWdzIHx8IChhc3NlcnRpb24uX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpbmNsdWRlQWxsID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IGluY2x1ZGVBbGwgOiB0cnVlO1xuXG4gIGZvciAodmFyIGZsYWcgaW4gZmxhZ3MpIHtcbiAgICBpZiAoaW5jbHVkZUFsbCB8fFxuICAgICAgICAoZmxhZyAhPT0gJ29iamVjdCcgJiYgZmxhZyAhPT0gJ3NzZmknICYmIGZsYWcgIT09ICdsb2NrU3NmaScgJiYgZmxhZyAhPSAnbWVzc2FnZScpKSB7XG4gICAgICBvYmplY3QuX19mbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWxzIFN5bWJvbDogZmFsc2UsIFVpbnQ4QXJyYXk6IGZhbHNlLCBXZWFrTWFwOiBmYWxzZSAqL1xuLyohXG4gKiBkZWVwLWVxbFxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSAnY2hhaS9kZWVwLWVxbF9fJyArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xufVxuXG5GYWtlTWFwLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxufTtcblxudmFyIE1lbW9pemVNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBGYWtlTWFwO1xuLyohXG4gKiBDaGVjayB0byBzZWUgaWYgdGhlIE1lbW9pemVNYXAgaGFzIHJlY29yZGVkIGEgcmVzdWx0IG9mIHRoZSB0d28gb3BlcmFuZHNcbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICogQHJldHVybnMge0Jvb2xlYW58bnVsbH0gcmVzdWx0XG4qL1xuZnVuY3Rpb24gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwKSB7XG4gIC8vIFRlY2huaWNhbGx5LCBXZWFrTWFwIGtleXMgY2FuICpvbmx5KiBiZSBvYmplY3RzLCBub3QgcHJpbWl0aXZlcy5cbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICB2YXIgcmVzdWx0ID0gbGVmdEhhbmRNYXAuZ2V0KHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiFcbiAqIFNldCB0aGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSBpbnRvIHRoZSBNZW1vaXplTWFwXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzdWx0XG4qL1xuZnVuY3Rpb24gbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXAsIHJlc3VsdCkge1xuICAvLyBUZWNobmljYWxseSwgV2Vha01hcCBrZXlzIGNhbiAqb25seSogYmUgb2JqZWN0cywgbm90IHByaW1pdGl2ZXMuXG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIGxlZnRIYW5kTWFwID0gbmV3IE1lbW9pemVNYXAoKTtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgICBtZW1vaXplTWFwLnNldChsZWZ0SGFuZE9wZXJhbmQsIGxlZnRIYW5kTWFwKTtcbiAgfVxufVxuXG4vKiFcbiAqIFByaW1hcnkgRXhwb3J0XG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwRXF1YWw7XG5tb2R1bGUuZXhwb3J0cy5NZW1vaXplTWFwID0gTWVtb2l6ZU1hcDtcblxuLyoqXG4gKiBBc3NlcnQgZGVlcGx5IG5lc3RlZCBzYW1lVmFsdWUgZXF1YWxpdHkgYmV0d2VlbiB0d28gb2JqZWN0cyBvZiBhbnkgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNvbXBhcmF0b3JdIChvcHRpb25hbCkgT3ZlcnJpZGUgZGVmYXVsdCBhbGdvcml0aG0sIGRldGVybWluaW5nIGN1c3RvbSBlcXVhbGl0eS5cbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLm1lbW9pemVdIChvcHRpb25hbCkgUHJvdmlkZSBhIGN1c3RvbSBtZW1vaXphdGlvbiBvYmplY3Qgd2hpY2ggd2lsbCBjYWNoZSB0aGUgcmVzdWx0cyBvZlxuICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgIHJlZmVyZW5jZXMgdG8gYmxvdyB0aGUgc3RhY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuICovXG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIC8vIElmIHdlIGhhdmUgYSBjb21wYXJhdG9yLCB3ZSBjYW4ndCBhc3N1bWUgYW55dGhpbmc7IHNvIGJhaWwgdG8gaXRzIGNoZWNrIGZpcnN0LlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cblxuICAvLyBEZWVwZXIgY29tcGFyaXNvbnMgYXJlIHB1c2hlZCB0aHJvdWdoIHRvIGEgbGFyZ2VyIGZ1bmN0aW9uXG4gIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBNYW55IGNvbXBhcmlzb25zIGNhbiBiZSBjYW5jZWxlZCBvdXQgZWFybHkgdmlhIHNpbXBsZSBlcXVhbGl0eSBvciBwcmltaXRpdmUgY2hlY2tzLlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcmV0dXJuIHtCb29sZWFufG51bGx9IGVxdWFsIG1hdGNoXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICAvLyBFcXVhbCByZWZlcmVuY2VzIChleGNlcHQgZm9yIE51bWJlcnMpIGNhbiBiZSByZXR1cm5lZCBlYXJseVxuICBpZiAobGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kKSB7XG4gICAgLy8gSGFuZGxlICstMCBjYXNlc1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cblxuICAvLyBoYW5kbGUgTmFOIGNhc2VzXG4gIGlmIChcbiAgICBsZWZ0SGFuZE9wZXJhbmQgIT09IGxlZnRIYW5kT3BlcmFuZCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBBbnl0aGluZyB0aGF0IGlzIG5vdCBhbiAnb2JqZWN0JywgaS5lLiBzeW1ib2xzLCBmdW5jdGlvbnMsIGJvb2xlYW5zLCBudW1iZXJzLFxuICAvLyBzdHJpbmdzLCBhbmQgdW5kZWZpbmVkLCBjYW4gYmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlLlxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIC8vIEVhc3kgb3V0IGIvYyBpdCB3b3VsZCBoYXZlIHBhc3NlZCB0aGUgZmlyc3QgZXF1YWxpdHkgY2hlY2tcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qIVxuICogVGhlIG1haW4gbG9naWMgb2YgdGhlIGBkZWVwRXF1YWxgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAob3B0aW9uYWwpIEFkZGl0aW9uYWwgb3B0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubWVtb2l6ZV0gKG9wdGlvbmFsKSBQcm92aWRlIGEgY3VzdG9tIG1lbW9pemF0aW9uIG9iamVjdCB3aGljaCB3aWxsIGNhY2hlIHRoZSByZXN1bHRzIG9mXG4gICAgY29tcGxleCBvYmplY3RzIGZvciBhIHNwZWVkIGJvb3N0LiBCeSBwYXNzaW5nIGBmYWxzZWAgeW91IGNhbiBkaXNhYmxlIG1lbW9pemF0aW9uLCBidXQgdGhpcyB3aWxsIGNhdXNlIGNpcmN1bGFyXG4gICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIG1hdGNoXG4qL1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5tZW1vaXplID0gb3B0aW9ucy5tZW1vaXplID09PSBmYWxzZSA/IGZhbHNlIDogb3B0aW9ucy5tZW1vaXplIHx8IG5ldyBNZW1vaXplTWFwKCk7XG4gIHZhciBjb21wYXJhdG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3I7XG5cbiAgLy8gQ2hlY2sgaWYgYSBtZW1vaXplZCByZXN1bHQgZXhpc3RzLlxuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuXG4gIC8vIElmIGEgY29tcGFyYXRvciBpcyBwcmVzZW50LCB1c2UgaXQuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgdmFyIGNvbXBhcmF0b3JSZXN1bHQgPSBjb21wYXJhdG9yKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgLy8gQ29tcGFyYXRvcnMgbWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gZ28gYmFjayB0byBkZWZhdWx0IGJlaGF2aW9yLlxuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICAvLyBUbyBhbGxvdyBjb21wYXJhdG9ycyB0byBvdmVycmlkZSAqYW55KiBiZWhhdmlvciwgd2UgcmFuIHRoZW0gZmlyc3QuIFNpbmNlIGl0IGRpZG4ndCBkZWNpZGVcbiAgICAvLyB3aGF0IHRvIGRvLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byByZXR1cm4gdGhlIGJhc2ljIHRlc3RzIGZpcnN0IGJlZm9yZSB3ZSBtb3ZlIG9uLlxuICAgIHZhciBzaW1wbGVSZXN1bHQgPSBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IG1lbW9pemUgdGhpcywgaXQgdGFrZXMgbG9uZ2VyIHRvIHNldC9yZXRyaWV2ZSB0aGFuIHRvIGp1c3QgY29tcGFyZS5cbiAgICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxlZnRIYW5kVHlwZSA9IHR5cGUobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIGZhbHNlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUZW1wb3JhcmlseSBzZXQgdGhlIG9wZXJhbmRzIGluIHRoZSBtZW1vaXplIG9iamVjdCB0byBwcmV2ZW50IGJsb3dpbmcgdGhlIHN0YWNrXG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuXG4gIHZhciByZXN1bHQgPSBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpO1xuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChsZWZ0SGFuZFR5cGUpIHtcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgIGNhc2UgJ051bWJlcic6XG4gICAgY2FzZSAnQm9vbGVhbic6XG4gICAgY2FzZSAnRGF0ZSc6XG4gICAgICAvLyBJZiB0aGVzZSB0eXBlcyBhcmUgdGhlaXIgaW5zdGFuY2UgdHlwZXMgKGUuZy4gYG5ldyBOdW1iZXJgKSB0aGVuIHJlLWRlZXBFcXVhbCBhZ2FpbnN0IHRoZWlyIHZhbHVlc1xuICAgICAgcmV0dXJuIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQudmFsdWVPZigpLCByaWdodEhhbmRPcGVyYW5kLnZhbHVlT2YoKSk7XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnU3ltYm9sJzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBbICduYW1lJywgJ21lc3NhZ2UnLCAnY29kZScgXSwgb3B0aW9ucyk7XG4gICAgY2FzZSAnQXJndW1lbnRzJzpcbiAgICBjYXNlICdJbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICBjYXNlICdJbnQxNkFycmF5JzpcbiAgICBjYXNlICdVaW50MTZBcnJheSc6XG4gICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgY2FzZSAnVWludDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQ2NEFycmF5JzpcbiAgICBjYXNlICdBcnJheSc6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlICdHZW5lcmF0b3InOlxuICAgICAgcmV0dXJuIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnRGF0YVZpZXcnOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kLmJ1ZmZlciksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQuYnVmZmVyKSwgb3B0aW9ucyk7XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnTWFwJzpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpbkRhdGUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5EYXRlVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuSW5zdGFudCc6XG4gICAgY2FzZSAnVGVtcG9yYWwuWm9uZWREYXRlVGltZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGgnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluTW9udGhEYXknOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSAnVGVtcG9yYWwuRHVyYXRpb24nOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b3RhbCgnbmFub3NlY29uZHMnKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b3RhbCgnbmFub3NlY29uZHMnKTtcbiAgICBjYXNlICdUZW1wb3JhbC5UaW1lWm9uZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuQ2FsZW5kYXInOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qIVxuICogQ29tcGFyZSB0d28gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIHtSZWdFeHB9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtSZWdFeHB9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbn1cblxuLyohXG4gKiBDb21wYXJlIHR3byBTZXRzL01hcHMgZm9yIGVxdWFsaXR5LiBGYXN0ZXIgdGhhbiBvdGhlciBlcXVhbGl0eSBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtTZXR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBTZXQjZW50cmllcyBvciBTZXQjQEBpdGVyYXRvciwgc28gd2UgbmVlZCBtYW51YWxseSBwb3B1bGF0ZSB1c2luZyBTZXQjZm9yRWFjaFxuICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgIT09IHJpZ2h0SGFuZE9wZXJhbmQuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgbGVmdEhhbmRJdGVtcy5wdXNoKFsga2V5LCB2YWx1ZSBdKTtcbiAgfSk7XG4gIHJpZ2h0SGFuZE9wZXJhbmQuZm9yRWFjaChmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICByaWdodEhhbmRJdGVtcy5wdXNoKFsga2V5LCB2YWx1ZSBdKTtcbiAgfSk7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kSXRlbXMuc29ydCgpLCByaWdodEhhbmRJdGVtcy5zb3J0KCksIG9wdGlvbnMpO1xufVxuXG4vKiFcbiAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZmxhdCBpdGVyYWJsZSBvYmplY3RzIHN1Y2ggYXMgQXJyYXlzLCBUeXBlZEFycmF5cyBvciBOb2RlLmpzIGJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBsZWZ0SGFuZE9wZXJhbmQubGVuZ3RoO1xuICBpZiAobGVuZ3RoICE9PSByaWdodEhhbmRPcGVyYW5kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRbaW5kZXhdLCByaWdodEhhbmRPcGVyYW5kW2luZGV4XSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiFcbiAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMgc3VjaCBhcyB0aG9zZSByZXR1cm5lZCBieSBnZW5lcmF0b3IgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBnZW5lcmF0b3JFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwoZ2V0R2VuZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpLCBnZXRHZW5lcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbn1cblxuLyohXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyohXG4gKiBHZXRzIGFsbCBpdGVyYXRvciBlbnRyaWVzIGZyb20gdGhlIGdpdmVuIE9iamVjdC4gSWYgdGhlIE9iamVjdCBoYXMgbm8gQEBpdGVyYXRvciBmdW5jdGlvbiwgcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAqIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBpdGVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzIGRlcGVuZGluZyBvbiB0aGUgQEBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgQEBpdGVyYXRvciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBnZXRJdGVyYXRvckVudHJpZXModGFyZ2V0KSB7XG4gIGlmIChoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGdldEdlbmVyYXRvckVudHJpZXModGFyZ2V0W1N5bWJvbC5pdGVyYXRvcl0oKSk7XG4gICAgfSBjYXRjaCAoaXRlcmF0b3JFcnJvcikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5cbi8qIVxuICogR2V0cyBhbGwgZW50cmllcyBmcm9tIGEgR2VuZXJhdG9yLiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgZ2VuZXJhdG9yIC0gd2hpY2ggY291bGQgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gKlxuICogQHBhcmFtIHtHZW5lcmF0b3J9IHRhcmdldFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEdlbmVyYXRvci5cbiAqL1xuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yRW50cmllcyhnZW5lcmF0b3IpIHtcbiAgdmFyIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gIHZhciBhY2N1bXVsYXRvciA9IFsgZ2VuZXJhdG9yUmVzdWx0LnZhbHVlIF07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbi8qIVxuICogR2V0cyBhbGwgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gYSB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlS2V5cyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlU3ltYm9scyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBrZXkgPSBhbGxLZXlzW2ldO1xuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KS5lbnVtZXJhYmxlKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5cbi8qIVxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBoYXZlIG1hdGNoaW5nIHZhbHVlcywgZ2l2ZW4gYSBzZXQgb2Yga2V5cy4gRGVmZXJzIHRvIGRlZXBFcXVhbCBmb3IgdGhlIGVxdWFsaXR5IGNoZWNrIG9mXG4gKiBlYWNoIGtleS4gSWYgYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkgaXMgbm90IGVxdWFsLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UgKGVhcmx5KS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7QXJyYXl9IGtleXMgQW4gYXJyYXkgb2Yga2V5cyB0byBjb21wYXJlIHRoZSB2YWx1ZXMgb2YgbGVmdEhhbmRPcGVyYW5kIGFuZCByaWdodEhhbmRPcGVyYW5kIGFnYWluc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qIVxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIGVxdWFsaXR5IG9mIHR3byBPYmplY3RzLiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGwgZGVmZXIgdG8gYGRlZXBFcXVhbGBcbiAqIGZvciBlYWNoIGVudW1lcmFibGUga2V5IGluIHRoZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5mdW5jdGlvbiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlZnRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIHZhciBsZWZ0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBsZWZ0SGFuZEtleXMgPSBsZWZ0SGFuZEtleXMuY29uY2F0KGxlZnRIYW5kU3ltYm9scyk7XG4gIHJpZ2h0SGFuZEtleXMgPSByaWdodEhhbmRLZXlzLmNvbmNhdChyaWdodEhhbmRTeW1ib2xzKTtcblxuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgbGVmdEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRFbnRyaWVzLmxlbmd0aCAmJiBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCkge1xuICAgIGxlZnRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmlnaHRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRFbnRyaWVzLCByaWdodEhhbmRFbnRyaWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoID09PSAwICYmXG4gICAgICBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSAwICYmXG4gICAgICByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgcmlnaHRIYW5kRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyohXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlLlxuICpcbiAqIFRoaXMgaW50ZW50aW9uYWxseSByZXR1cm5zIHRydWUgZm9yIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZSxcbiAqIGluY2x1ZGluZyBmdW5jdGlvbnMgYW5kIHN5bWJvbHMuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jztcbn1cblxuZnVuY3Rpb24gbWFwU3ltYm9scyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gbWFwU3ltYm9sKGVudHJ5KSB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG4iLCAidmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG4vKiFcbiAqIENoYWkgLSBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuaXNQcm94eUVuYWJsZWQoKVxuICpcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBDaGFpJ3MgcHJveHkgcHJvdGVjdGlvbiBmZWF0dXJlIGlzIGVuYWJsZWQuIElmXG4gKiBwcm94aWVzIGFyZSB1bnN1cHBvcnRlZCBvciBkaXNhYmxlZCB2aWEgdGhlIHVzZXIncyBDaGFpIGNvbmZpZywgdGhlbiByZXR1cm5cbiAqIGZhbHNlLiBPdGhlcndpc2UsIHJldHVybiB0cnVlLlxuICpcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGlzUHJveHlFbmFibGVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1Byb3h5RW5hYmxlZCgpIHtcbiAgcmV0dXJuIGNvbmZpZy51c2VQcm94eSAmJlxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGFkZFByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgaXNQcm94eUVuYWJsZWQgPSByZXF1aXJlKCcuL2lzUHJveHlFbmFibGVkJyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAuYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpXG4gKlxuICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBwcm90b3R5cGUgb2YgYW4gb2JqZWN0LlxuICpcbiAqICAgICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5pbnN0YW5jZW9mKEZvbyk7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5iZS5mb287XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBhZGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKCkge30gOiBnZXR0ZXI7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBwcm9wZXJ0eUdldHRlcmAgY2F1c2VzIHRoaXMgZnVuY3Rpb24gdG9cbiAgICAgICAgLy8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXMgZnJvbSB0aGVcbiAgICAgICAgLy8gc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmXG4gICAgICAgIC8vIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0IGFuZCBwcm94eSBwcm90ZWN0aW9uIGlzIGRpc2FibGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAgICAgLy8gb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBhc3NlcnRpb24sIG9yIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nIGludm9rZWRcbiAgICAgICAgLy8gZnJvbSBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWdcbiAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZFxuICAgICAgICAvLyBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgcHJveHkgcHJvdGVjdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuXG4gICAgICAgIC8vIHNldCBieSB0aGUgcHJveHkgZ2V0dGVyLlxuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgcHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH1cbiAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn07XG4iLCAidmFyIGZuTGVuZ3RoRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge30sICdsZW5ndGgnKTtcblxuLyohXG4gKiBDaGFpIC0gYWRkTGVuZ3RoR3VhcmQgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5hZGRMZW5ndGhHdWFyZChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpXG4gKlxuICogRGVmaW5lIGBsZW5ndGhgIGFzIGEgZ2V0dGVyIG9uIHRoZSBnaXZlbiB1bmludm9rZWQgbWV0aG9kIGFzc2VydGlvbi4gVGhlXG4gKiBnZXR0ZXIgYWN0cyBhcyBhIGd1YXJkIGFnYWluc3QgY2hhaW5pbmcgYGxlbmd0aGAgZGlyZWN0bHkgb2ZmIG9mIGFuIHVuaW52b2tlZFxuICogbWV0aG9kIGFzc2VydGlvbiwgd2hpY2ggaXMgYSBwcm9ibGVtIGJlY2F1c2UgaXQgcmVmZXJlbmNlcyBgZnVuY3Rpb25gJ3NcbiAqIGJ1aWx0LWluIGBsZW5ndGhgIHByb3BlcnR5IGluc3RlYWQgb2YgQ2hhaSdzIGBsZW5ndGhgIGFzc2VydGlvbi4gV2hlbiB0aGVcbiAqIGdldHRlciBjYXRjaGVzIHRoZSB1c2VyIG1ha2luZyB0aGlzIG1pc3Rha2UsIGl0IHRocm93cyBhbiBlcnJvciB3aXRoIGFcbiAqIGhlbHBmdWwgbWVzc2FnZS5cbiAqXG4gKiBUaGVyZSBhcmUgdHdvIHdheXMgaW4gd2hpY2ggdGhpcyBtaXN0YWtlIGNhbiBiZSBtYWRlLiBUaGUgZmlyc3Qgd2F5IGlzIGJ5XG4gKiBjaGFpbmluZyB0aGUgYGxlbmd0aGAgYXNzZXJ0aW9uIGRpcmVjdGx5IG9mZiBvZiBhbiB1bmludm9rZWQgY2hhaW5hYmxlXG4gKiBtZXRob2QuIEluIHRoaXMgY2FzZSwgQ2hhaSBzdWdnZXN0cyB0aGF0IHRoZSB1c2VyIHVzZSBgbGVuZ3RoT2ZgIGluc3RlYWQuIFRoZVxuICogc2Vjb25kIHdheSBpcyBieSBjaGFpbmluZyB0aGUgYGxlbmd0aGAgYXNzZXJ0aW9uIGRpcmVjdGx5IG9mZiBvZiBhbiB1bmludm9rZWRcbiAqIG5vbi1jaGFpbmFibGUgbWV0aG9kLiBOb24tY2hhaW5hYmxlIG1ldGhvZHMgbXVzdCBiZSBpbnZva2VkIHByaW9yIHRvXG4gKiBjaGFpbmluZy4gSW4gdGhpcyBjYXNlLCBDaGFpIHN1Z2dlc3RzIHRoYXQgdGhlIHVzZXIgY29uc3VsdCB0aGUgZG9jcyBmb3IgdGhlXG4gKiBnaXZlbiBhc3NlcnRpb24uXG4gKlxuICogSWYgdGhlIGBsZW5ndGhgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyB1bmNvbmZpZ3VyYWJsZSwgdGhlbiByZXR1cm4gYGZuYFxuICogd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogTm90ZSB0aGF0IGluIEVTNiwgdGhlIGZ1bmN0aW9uJ3MgYGxlbmd0aGAgcHJvcGVydHkgaXMgY29uZmlndXJhYmxlLCBzbyBvbmNlXG4gKiBzdXBwb3J0IGZvciBsZWdhY3kgZW52aXJvbm1lbnRzIGlzIGRyb3BwZWQsIENoYWkncyBgbGVuZ3RoYCBwcm9wZXJ0eSBjYW5cbiAqIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uJ3MgYGxlbmd0aGAgcHJvcGVydHksIGFuZCB0aGlzIGxlbmd0aCBndWFyZCB3aWxsXG4gKiBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LiBJbiB0aGUgbWVhbiB0aW1lLCBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgYWxsXG4gKiBlbnZpcm9ubWVudHMgaXMgdGhlIHByaW9yaXR5LlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge1N0cmluZ30gYXNzZXJ0aW9uTmFtZVxuICogQHBhcmFtIHtCb29sZWFufSBpc0NoYWluYWJsZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgYWRkTGVuZ3RoR3VhcmRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZExlbmd0aEd1YXJkIChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpIHtcbiAgaWYgKCFmbkxlbmd0aERlc2MuY29uZmlndXJhYmxlKSByZXR1cm4gZm47XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzQ2hhaW5hYmxlKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIER1ZScgK1xuICAgICAgICAgICcgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICtcbiAgICAgICAgICBhc3NlcnRpb25OYW1lICsgJ1wiLiBVc2UgXCInICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoT2ZcIiBpbnN0ZWFkLicpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUnICtcbiAgICAgICAgJyBkb2NzIGZvciBwcm9wZXIgdXNhZ2Ugb2YgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmbjtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0UHJvcGVydGllcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldFByb3BlcnRpZXMob2JqZWN0KVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LCBlbnVtZXJhYmxlIG9yIG5vdCxcbiAqIGluaGVyaXRlZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UHJvcGVydGllc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFByb3BlcnRpZXMob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG4gIGZ1bmN0aW9uIGFkZFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgd2hpbGUgKHByb3RvICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goYWRkUHJvcGVydHkpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgInZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgZ2V0UHJvcGVydGllcyA9IHJlcXVpcmUoJy4vZ2V0UHJvcGVydGllcycpO1xudmFyIGlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xuXG4vKiFcbiAqIENoYWkgLSBwcm94aWZ5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAucHJveGlmeShvYmplY3QpXG4gKlxuICogUmV0dXJuIGEgcHJveHkgb2YgZ2l2ZW4gb2JqZWN0IHRoYXQgdGhyb3dzIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnRcbiAqIHByb3BlcnR5IGlzIHJlYWQuIEJ5IGRlZmF1bHQsIHRoZSByb290IGNhdXNlIGlzIGFzc3VtZWQgdG8gYmUgYSBtaXNzcGVsbGVkXG4gKiBwcm9wZXJ0eSwgYW5kIHRodXMgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG9mZmVyIGEgcmVhc29uYWJsZSBzdWdnZXN0aW9uIGZyb21cbiAqIHRoZSBsaXN0IG9mIGV4aXN0aW5nIHByb3BlcnRpZXMuIEhvd2V2ZXIsIGlmIGEgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSBpc1xuICogcHJvdmlkZWQsIHRoZW4gdGhlIHJvb3QgY2F1c2UgaXMgaW5zdGVhZCBhIGZhaWx1cmUgdG8gaW52b2tlIGEgbm9uLWNoYWluYWJsZVxuICogbWV0aG9kIHByaW9yIHRvIHJlYWRpbmcgdGhlIG5vbi1leGlzdGVudCBwcm9wZXJ0eS5cbiAqXG4gKiBJZiBwcm94aWVzIGFyZSB1bnN1cHBvcnRlZCBvciBkaXNhYmxlZCB2aWEgdGhlIHVzZXIncyBDaGFpIGNvbmZpZywgdGhlblxuICogcmV0dXJuIG9iamVjdCB3aXRob3V0IG1vZGlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgcHJveGlmeVxuICovXG5cbnZhciBidWlsdGlucyA9IFsnX19mbGFncycsICdfX21ldGhvZHMnLCAnX29iaicsICdhc3NlcnQnXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcm94aWZ5KG9iaiwgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICBpZiAoIWlzUHJveHlFbmFibGVkKCkpIHJldHVybiBvYmo7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIHByb3h5R2V0dGVyKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgaGVyZSBiZWNhdXNlIHdlIHNob3VsZCBub3QgdGhyb3cgZXJyb3JzIG9uIFN5bWJvbCBwcm9wZXJ0aWVzXG4gICAgICAvLyBzdWNoIGFzIGBTeW1ib2wudG9TdHJpbmdUYWdgLlxuICAgICAgLy8gVGhlIHZhbHVlcyBmb3Igd2hpY2ggYW4gZXJyb3Igc2hvdWxkIGJlIHRocm93biBjYW4gYmUgY29uZmlndXJlZCB1c2luZ1xuICAgICAgLy8gdGhlIGBjb25maWcucHJveHlFeGNsdWRlZEtleXNgIHNldHRpbmcuXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiZcbiAgICAgICAgICAhUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBtZXNzYWdlIGZvciBpbnZhbGlkIHByb3BlcnR5IGFjY2VzcyBvZiBub24tY2hhaW5hYmxlIG1ldGhvZHMuXG4gICAgICAgIGlmIChub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnLicgK1xuICAgICAgICAgICAgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArXG4gICAgICAgICAgICBub25DaGFpbmFibGVNZXRob2ROYW1lICsgJ1wiLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIHJlYXNvbmFibHkgY2xvc2UgdG8gYW4gZXhpc3RpbmcgQ2hhaSBwcm9wZXJ0eSxcbiAgICAgICAgLy8gc3VnZ2VzdCB0aGF0IHByb3BlcnR5IHRvIHRoZSB1c2VyLiBPbmx5IHN1Z2dlc3QgcHJvcGVydGllcyB3aXRoIGFcbiAgICAgICAgLy8gZGlzdGFuY2UgbGVzcyB0aGFuIDQuXG4gICAgICAgIHZhciBzdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgICAgdmFyIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IDQ7XG4gICAgICAgIGdldFByb3BlcnRpZXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICAgICAgYnVpbHRpbnMuaW5kZXhPZihwcm9wKSA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gc3RyaW5nRGlzdGFuY2VDYXBwZWQoXG4gICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZGlzdCA8IHN1Z2dlc3Rpb25EaXN0YW5jZSkge1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uID0gcHJvcDtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlID0gZGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdWdnZXN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIHByb3BlcnR5ICtcbiAgICAgICAgICAgICcuIERpZCB5b3UgbWVhbiBcIicgKyBzdWdnZXN0aW9uICsgJ1wiPycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoaXMgcHJveHkgZ2V0dGVyIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uIEZvciBwcm9wZXJ0eVxuICAgICAgLy8gYXNzZXJ0aW9ucywgdGhpcyBwcmV2ZW50cyB0aGUgcHJveHkgZ2V0dGVyIGZyb20gc2hvd2luZyB1cCBpbiB0aGUgc3RhY2tcbiAgICAgIC8vIHRyYWNlIHNpbmNlIGl0J3MgaW52b2tlZCBiZWZvcmUgdGhlIHByb3BlcnR5IGdldHRlci4gRm9yIG1ldGhvZCBhbmRcbiAgICAgIC8vIGNoYWluYWJsZSBtZXRob2QgYXNzZXJ0aW9ucywgdGhpcyBmbGFnIHdpbGwgZW5kIHVwIGdldHRpbmcgY2hhbmdlZCB0b1xuICAgICAgLy8gdGhlIG1ldGhvZCB3cmFwcGVyLCB3aGljaCBpcyBnb29kIHNpbmNlIHRoaXMgZnJhbWUgd2lsbCBubyBsb25nZXIgYmUgaW5cbiAgICAgIC8vIHRoZSBzdGFjayBvbmNlIHRoZSBtZXRob2QgaXMgaW52b2tlZC4gTm90ZSB0aGF0IENoYWkgYnVpbHRpbiBhc3NlcnRpb25cbiAgICAgIC8vIHByb3BlcnRpZXMgc3VjaCBhcyBgX19mbGFnc2AgYXJlIHNraXBwZWQgc2luY2UgdGhpcyBpcyBvbmx5IG1lYW50IHRvXG4gICAgICAvLyBjYXB0dXJlIHRoZSBzdGFydGluZyBwb2ludCBvZiBhbiBhc3NlcnRpb24uIFRoaXMgc3RlcCBpcyBhbHNvIHNraXBwZWRcbiAgICAgIC8vIGlmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aHVzIGluZGljYXRpbmcgdGhhdCB0aGlzIGFzc2VydGlvbiBpc1xuICAgICAgLy8gYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGF0IGNhc2UsIHRoZSBgc3NmaWBcbiAgICAgIC8vIGZsYWcgaXMgYWxyZWFkeSBzZXQgdG8gdGhlIG91dGVyIGFzc2VydGlvbidzIHN0YXJ0aW5nIHBvaW50LlxuICAgICAgaWYgKGJ1aWx0aW5zLmluZGV4T2YocHJvcGVydHkpID09PSAtMSAmJiAhZmxhZyh0YXJnZXQsICdsb2NrU3NmaScpKSB7XG4gICAgICAgIGZsYWcodGFyZ2V0LCAnc3NmaScsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqICMgc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKVxuICogUmV0dXJuIHRoZSBMZXZlbnNodGVpbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzdHJpbmdzLCBidXQgbm8gbW9yZSB0aGFuIGNhcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJBXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyQlxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlclxuICogQHJldHVybiB7bnVtYmVyfSBtaW4oc3RyaW5nIGRpc3RhbmNlIGJldHdlZW4gc3RyQSBhbmQgc3RyQiwgY2FwKVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKSB7XG4gIGlmIChNYXRoLmFicyhzdHJBLmxlbmd0aCAtIHN0ckIubGVuZ3RoKSA+PSBjYXApIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG5cbiAgdmFyIG1lbW8gPSBbXTtcbiAgLy8gYG1lbW9gIGlzIGEgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgZGlzdGFuY2VzLlxuICAvLyBtZW1vW2ldW2pdIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHN0ckEuc2xpY2UoMCwgaSkgYW5kXG4gIC8vIHN0ckIuc2xpY2UoMCwgaikuXG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICBtZW1vW2ldID0gQXJyYXkoc3RyQi5sZW5ndGggKyAxKS5maWxsKDApO1xuICAgIG1lbW9baV1bMF0gPSBpO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgc3RyQi5sZW5ndGg7IGorKykge1xuICAgIG1lbW9bMF1bal0gPSBqO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc3RyQS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaCA9IHN0ckEuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gc3RyQi5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKE1hdGguYWJzKGkgLSBqKSA+PSBjYXApIHtcbiAgICAgICAgbWVtb1tpXVtqXSA9IGNhcDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZW1vW2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgIG1lbW9baSAtIDFdW2pdICsgMSxcbiAgICAgICAgbWVtb1tpXVtqIC0gMV0gKyAxLFxuICAgICAgICBtZW1vW2kgLSAxXVtqIC0gMV0gK1xuICAgICAgICAgIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVtb1tzdHJBLmxlbmd0aF1bc3RyQi5sZW5ndGhdO1xufVxuIiwgIi8qIVxuICogQ2hhaSAtIGFkZE1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5hZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpXG4gKlxuICogQWRkcyBhIG1ldGhvZCB0byB0aGUgcHJvdG90eXBlIG9mIGFuIG9iamVjdC5cbiAqXG4gKiAgICAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2ZvbycsIGZ1bmN0aW9uIChzdHIpIHtcbiAqICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmopLnRvLmJlLmVxdWFsKHN0cik7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvbygnYmFyJyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIG1ldGhvZCBpcyBhZGRlZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIGFkZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGFkZE1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgbWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgbWV0aG9kV3JhcHBlcmAgY2F1c2VzIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlXG4gICAgLy8gc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZlxuICAgIC8vIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWYgdGhlXG4gICAgLy8gYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIGVpdGhlciB0aGlzIGFzc2VydGlvbiBoYXMgYmVlblxuICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb21cbiAgICAvLyBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzXG4gICAgLy8gYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZVxuICAgIC8vIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgaWYgKCFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICBmbGFnKHRoaXMsICdzc2ZpJywgbWV0aG9kV3JhcHBlcik7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH07XG5cbiAgYWRkTGVuZ3RoR3VhcmQobWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG1ldGhvZFdyYXBwZXIsIG5hbWUpO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVQcm9wZXJ0eSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIGlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLm92ZXJ3cml0ZVByb3BlcnR5KGN0eCwgbmFtZSwgZm4pXG4gKlxuICogT3ZlcndyaXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIHByb3BlcnR5IGdldHRlciBhbmQgcHJvdmlkZXNcbiAqIGFjY2VzcyB0byBwcmV2aW91cyB2YWx1ZS4gTXVzdCByZXR1cm4gZnVuY3Rpb24gdG8gdXNlIGFzIGdldHRlci5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlUHJvcGVydHkoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnb2snLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICogICAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb28pIHtcbiAqICAgICAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqLm5hbWUpLnRvLmVxdWFsKCdiYXInKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmJlLm9rO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBnZXR0ZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgb3ZlcndyaXRlUHJvcGVydHlcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICB2YXIgX2dldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBuYW1lKVxuICAgICwgX3N1cGVyID0gZnVuY3Rpb24gKCkge307XG5cbiAgaWYgKF9nZXQgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9nZXQuZ2V0KVxuICAgIF9zdXBlciA9IF9nZXQuZ2V0XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXJgIGNhdXNlcyB0aGlzXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb24gZnJhbWVzXG4gICAgICAgIC8vIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZlxuICAgICAgICAvLyB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldCBhbmQgcHJveHkgcHJvdGVjdGlvbiBpcyBkaXNhYmxlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gZWl0aGVyIHRoaXMgYXNzZXJ0aW9uIGhhcyBiZWVuXG4gICAgICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkXG4gICAgICAgIC8vIGZyb20gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnXG4gICAgICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uIEluIHRoZSBzZWNvbmRcbiAgICAgICAgLy8gY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHByb3h5IHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgdGhlbiB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlblxuICAgICAgICAvLyBzZXQgYnkgdGhlIHByb3h5IGdldHRlci5cbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dGluZyB0aGUgYGxvY2tTc2ZpYCBmbGFnIHRvIGB0cnVlYCBwcmV2ZW50cyB0aGUgb3ZlcndyaXR0ZW5cbiAgICAgICAgLy8gYXNzZXJ0aW9uIGZyb20gY2hhbmdpbmcgdGhlIGBzc2ZpYCBmbGFnLiBCeSB0aGlzIHBvaW50LCB0aGUgYHNzZmlgXG4gICAgICAgIC8vIGZsYWcgaXMgYWxyZWFkeSBzZXQgdG8gdGhlIGNvcnJlY3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYXNzZXJ0aW9uLlxuICAgICAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCAnbG9ja1NzZmknKTtcbiAgICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCB0cnVlKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgb3JpZ0xvY2tTc2ZpKTtcblxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9XG4gICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5vdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBmbilcbiAqXG4gKiBPdmVyd3JpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgbWV0aG9kIGFuZCBwcm92aWRlc1xuICogYWNjZXNzIHRvIHByZXZpb3VzIGZ1bmN0aW9uLiBNdXN0IHJldHVybiBmdW5jdGlvblxuICogdG8gYmUgdXNlZCBmb3IgbmFtZS5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2VxdWFsJywgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIpIHtcbiAqICAgICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRm9vKSB7XG4gKiAgICAgICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iai52YWx1ZSkudG8uZXF1YWwoc3RyKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kKCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmVxdWFsKCdiYXInKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB3aG9zZSBtZXRob2QgaXMgdG8gYmUgb3ZlcndyaXR0ZW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIG1ldGhvZCB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBvdmVyd3JpdGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIF9tZXRob2QgPSBjdHhbbmFtZV1cbiAgICAsIF9zdXBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH07XG5cbiAgaWYgKF9tZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9tZXRob2QpXG4gICAgX3N1cGVyID0gX21ldGhvZDtcblxuICB2YXIgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXJgIGNhdXNlcyB0aGlzXG4gICAgLy8gZnVuY3Rpb24gdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXMgZnJvbVxuICAgIC8vIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmIHRoZVxuICAgIC8vIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAvLyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGFzc2VydGlvbiwgb3IgdGhpcyBhc3NlcnRpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tXG4gICAgLy8gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhc1xuICAgIC8vIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGVcbiAgICAvLyBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgIGlmICghZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcik7XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyB0aGUgYGxvY2tTc2ZpYCBmbGFnIHRvIGB0cnVlYCBwcmV2ZW50cyB0aGUgb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uXG4gICAgLy8gZnJvbSBjaGFuZ2luZyB0aGUgYHNzZmlgIGZsYWcuIEJ5IHRoaXMgcG9pbnQsIHRoZSBgc3NmaWAgZmxhZyBpcyBhbHJlYWR5XG4gICAgLy8gc2V0IHRvIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFzc2VydGlvbi5cbiAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCAnbG9ja1NzZmknKTtcbiAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHRydWUpO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX3N1cGVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgb3JpZ0xvY2tTc2ZpKTtcblxuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH1cblxuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIHByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qIVxuICogTW9kdWxlIHZhcmlhYmxlc1xuICovXG5cbi8vIENoZWNrIHdoZXRoZXIgYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgaXMgc3VwcG9ydGVkXG52YXIgY2FuU2V0UHJvdG90eXBlID0gdHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gV2l0aG91dCBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBzdXBwb3J0LCB0aGlzIG1vZHVsZSB3aWxsIG5lZWQgdG8gYWRkIHByb3BlcnRpZXMgdG8gYSBmdW5jdGlvbi5cbi8vIEhvd2V2ZXIsIHNvbWUgb2YgZnVuY3Rpb25zJyBvd24gcHJvcHMgYXJlIG5vdCBjb25maWd1cmFibGUgYW5kIHNob3VsZCBiZSBza2lwcGVkLlxudmFyIHRlc3RGbiA9IGZ1bmN0aW9uKCkge307XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG5cbiAgLy8gTm90ZTogUGhhbnRvbUpTIDEueCBpbmNsdWRlcyBgY2FsbGVlYCBhcyBvbmUgb2YgYHRlc3RGbmAncyBvd24gcHJvcGVydGllcyxcbiAgLy8gYnV0IHRoZW4gcmV0dXJucyBgdW5kZWZpbmVkYCBhcyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgYGNhbGxlZWAuIEFzIGFcbiAgLy8gd29ya2Fyb3VuZCwgd2UgcGVyZm9ybSBhbiBvdGhlcndpc2UgdW5uZWNlc3NhcnkgdHlwZS1jaGVjayBmb3IgYHByb3BEZXNjYCxcbiAgLy8gYW5kIHRoZW4gZmlsdGVyIGl0IG91dCBpZiBpdCdzIG5vdCBhbiBvYmplY3QgYXMgaXQgc2hvdWxkIGJlLlxuICBpZiAodHlwZW9mIHByb3BEZXNjICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gIXByb3BEZXNjLmNvbmZpZ3VyYWJsZTtcbn0pO1xuXG4vLyBDYWNoZSBgRnVuY3Rpb25gIHByb3BlcnRpZXNcbnZhciBjYWxsICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLFxuICAgIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vKipcbiAqICMjIyAuYWRkQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKVxuICpcbiAqIEFkZHMgYSBtZXRob2QgdG8gYW4gb2JqZWN0LCBzdWNoIHRoYXQgdGhlIG1ldGhvZCBjYW4gYWxzbyBiZSBjaGFpbmVkLlxuICpcbiAqICAgICB1dGlscy5hZGRDaGFpbmFibGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZm9vJywgZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaikudG8uYmUuZXF1YWwoc3RyKTtcbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnZm9vJywgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICpcbiAqIFRoZSByZXN1bHQgY2FuIHRoZW4gYmUgdXNlZCBhcyBib3RoIGEgbWV0aG9kIGFzc2VydGlvbiwgZXhlY3V0aW5nIGJvdGggYG1ldGhvZGAgYW5kXG4gKiBgY2hhaW5pbmdCZWhhdmlvcmAsIG9yIGFzIGEgbGFuZ3VhZ2UgY2hhaW4sIHdoaWNoIG9ubHkgZXhlY3V0ZXMgYGNoYWluaW5nQmVoYXZpb3JgLlxuICpcbiAqICAgICBleHBlY3QoZm9vU3RyKS50by5iZS5mb28oJ2JhcicpO1xuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvby5lcXVhbCgnZm9vJyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIG1ldGhvZCBpcyBhZGRlZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIGFkZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIGBuYW1lYCwgd2hlbiBjYWxsZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoYWluaW5nQmVoYXZpb3IgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRDaGFpbmFibGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hhaW5pbmdCZWhhdmlvciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IHtcbiAgICAgIG1ldGhvZDogbWV0aG9kXG4gICAgLCBjaGFpbmluZ0JlaGF2aW9yOiBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG5cbiAgLy8gc2F2ZSB0aGUgbWV0aG9kcyBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZW0gbGF0ZXIsIGlmIHdlIG5lZWQgdG8uXG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgbmFtZSxcbiAgICB7IGdldDogZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yLmNhbGwodGhpcyk7XG5cbiAgICAgICAgdmFyIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYGNoYWluYWJsZU1ldGhvZFdyYXBwZXJgIGNhdXNlcyB0aGlzXG4gICAgICAgICAgLy8gZnVuY3Rpb24gdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIC8vIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmXG4gICAgICAgICAgLy8gdGhlIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiB0aGlzIGFzc2VydGlvbiBpcyBiZWluZ1xuICAgICAgICAgIC8vIGludm9rZWQgZnJvbSBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoaXMgY2FzZSwgdGhlIGBzc2ZpYFxuICAgICAgICAgIC8vIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE5vdGUgdGhhdCBvdmVyd3JpdGluZyBhIGNoYWluYWJsZSBtZXRob2QgbWVyZWx5IHJlcGxhY2VzIHRoZSBzYXZlZFxuICAgICAgICAgIC8vIG1ldGhvZHMgaW4gYGN0eC5fX21ldGhvZHNgIGluc3RlYWQgb2YgY29tcGxldGVseSByZXBsYWNpbmcgdGhlXG4gICAgICAgICAgLy8gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uLiBUaGVyZWZvcmUsIGFuIG92ZXJ3cml0aW5nIGFzc2VydGlvbiB3b24ndFxuICAgICAgICAgIC8vIHNldCB0aGUgYHNzZmlgIG9yIGBsb2NrU3NmaWAgZmxhZ3MuXG4gICAgICAgICAgaWYgKCFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGVuZ3RoR3VhcmQoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgbmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gVXNlIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAoY2FuU2V0UHJvdG90eXBlKSB7XG4gICAgICAgICAgLy8gSW5oZXJpdCBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3QgYnkgcmVwbGFjaW5nIHRoZSBgRnVuY3Rpb25gIHByb3RvdHlwZVxuICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGBjYWxsYCBhbmQgYGFwcGx5YCBtZXRob2RzIGZyb20gYEZ1bmN0aW9uYFxuICAgICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgICBwcm90b3R5cGUuYXBwbHkgPSBhcHBseTtcbiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgcHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIHJlZGVmaW5lIGFsbCBwcm9wZXJ0aWVzIChzbG93ISlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZU5hbWVzLmluZGV4T2YoYXNzZXJ0ZXJOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgYXNzZXJ0ZXJOYW1lKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBwcm94aWZ5KGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgfVxuICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcilcbiAqXG4gKiBPdmVyd3JpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgY2hhaW5hYmxlIG1ldGhvZFxuICogYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcHJldmlvdXMgZnVuY3Rpb24gb3JcbiAqIHByb3BlcnR5LiAgTXVzdCByZXR1cm4gZnVuY3Rpb25zIHRvIGJlIHVzZWQgZm9yXG4gKiBuYW1lLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnbGVuZ3RoT2YnLFxuICogICAgICAgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgfVxuICogICAgICwgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgfVxuICogICAgICk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2ZvbycsIGZuLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5oYXZlLmxlbmd0aE9mLmFib3ZlKDMpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIG1ldGhvZCAvIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgLyBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFpbmluZ0JlaGF2aW9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHByb3BlcnR5XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcblxuICB2YXIgX2NoYWluaW5nQmVoYXZpb3IgPSBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yO1xuICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yID0gZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNoYWluaW5nQmVoYXZpb3IoX2NoYWluaW5nQmVoYXZpb3IpLmNhbGwodGhpcyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfTtcblxuICB2YXIgX21ldGhvZCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZDtcbiAgY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kID0gZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX21ldGhvZCkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9O1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBjb21wYXJlQnlJbnNwZWN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpO1xuXG4vKipcbiAqICMjIyAuY29tcGFyZUJ5SW5zcGVjdChtaXhlZCwgbWl4ZWQpXG4gKlxuICogVG8gYmUgdXNlZCBhcyBhIGNvbXBhcmVGdW5jdGlvbiB3aXRoIEFycmF5LnByb3RvdHlwZS5zb3J0LiBDb21wYXJlcyBlbGVtZW50c1xuICogdXNpbmcgaW5zcGVjdCBpbnN0ZWFkIG9mIGRlZmF1bHQgYmVoYXZpb3Igb2YgdXNpbmcgdG9TdHJpbmcgc28gdGhhdCBTeW1ib2xzXG4gKiBhbmQgb2JqZWN0cyB3aXRoIGlycmVndWxhci9taXNzaW5nIHRvU3RyaW5nIGNhbiBzdGlsbCBiZSBzb3J0ZWQgd2l0aG91dCBhXG4gKiBUeXBlRXJyb3IuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gZmlyc3QgZWxlbWVudCB0byBjb21wYXJlXG4gKiBAcGFyYW0ge01peGVkfSBzZWNvbmQgZWxlbWVudCB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSAtMSBpZiAnYScgc2hvdWxkIGNvbWUgYmVmb3JlICdiJzsgb3RoZXJ3aXNlIDFcbiAqIEBuYW1lIGNvbXBhcmVCeUluc3BlY3RcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21wYXJlQnlJbnNwZWN0KGEsIGIpIHtcbiAgcmV0dXJuIGluc3BlY3QoYSkgPCBpbnNwZWN0KGIpID8gLTEgOiAxO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBkaXJlY3RseS1vd25lZCBlbnVtZXJhYmxlIHByb3BlcnR5IHN5bWJvbHMgb2YgYW5cbiAqIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG4gKiByZXR1cm5zIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopIHtcbiAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKS5lbnVtZXJhYmxlO1xuICB9KTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzID0gcmVxdWlyZSgnLi9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzJyk7XG5cbi8qKlxuICogIyMjIC5nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBkaXJlY3RseS1vd25lZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBhbiBvYmplY3QuIFRoaXMgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgT2JqZWN0LmtleXMgb25seVxuICogcmV0dXJucyBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzLCBub3QgZW51bWVyYWJsZSBwcm9wZXJ0eSBzeW1ib2xzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmNvbmNhdChnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIENoYWkgLSBjaGVja0Vycm9yIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgZ2V0RnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnZ2V0LWZ1bmMtbmFtZScpO1xuLyoqXG4gKiAjIyMgLmNoZWNrRXJyb3JcbiAqXG4gKiBDaGVja3MgdGhhdCBhbiBlcnJvciBjb25mb3JtcyB0byBhIGdpdmVuIHNldCBvZiBjcml0ZXJpYSBhbmQvb3IgcmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IGl0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLyoqXG4gKiAjIyMgLmNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSlcbiAqXG4gKiBDaGVja3MgaWYgdHdvIGluc3RhbmNlcyBhcmUgY29tcGF0aWJsZSAoc3RyaWN0IGVxdWFsKS5cbiAqIFJldHVybnMgZmFsc2UgaWYgZXJyb3JMaWtlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBFcnJvciwgYmVjYXVzZSBpbnN0YW5jZXNcbiAqIGNhbiBvbmx5IGJlIGNvbXBhdGlibGUgaWYgdGhleSdyZSBib3RoIGVycm9yIGluc3RhbmNlcy5cbiAqXG4gKiBAbmFtZSBjb21wYXRpYmxlSW5zdGFuY2VcbiAqIEBwYXJhbSB7RXJyb3J9IHRocm93biBlcnJvclxuICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2Ugb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuXG4vKipcbiAqICMjIyAuY29tcGF0aWJsZUNvbnN0cnVjdG9yKHRocm93biwgZXJyb3JMaWtlKVxuICpcbiAqIENoZWNrcyBpZiB0d28gY29uc3RydWN0b3JzIGFyZSBjb21wYXRpYmxlLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gcmVjZWl2ZSBlaXRoZXIgYW4gZXJyb3IgY29uc3RydWN0b3Igb3JcbiAqIGFuIGVycm9yIGluc3RhbmNlIGFzIHRoZSBgZXJyb3JMaWtlYCBhcmd1bWVudC5cbiAqIENvbnN0cnVjdG9ycyBhcmUgY29tcGF0aWJsZSBpZiB0aGV5J3JlIHRoZSBzYW1lIG9yIGlmIG9uZSBpc1xuICogYW4gaW5zdGFuY2Ugb2YgYW5vdGhlci5cbiAqXG4gKiBAbmFtZSBjb21wYXRpYmxlQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXJyb3J9IHRocm93biBlcnJvclxuICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2Ugb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgLy8gSWYgYGVycm9yTGlrZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW55IGVycm9yIHdlIGNvbXBhcmUgdGhlaXIgY29uc3RydWN0b3JzXG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmIChlcnJvckxpa2UucHJvdG90eXBlIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyb3JMaWtlID09PSBFcnJvcikge1xuICAgIC8vIElmIGBlcnJvckxpa2VgIGlzIGEgY29uc3RydWN0b3IgdGhhdCBpbmhlcml0cyBmcm9tIEVycm9yLCB3ZSBjb21wYXJlIGB0aHJvd25gIHRvIGBlcnJvckxpa2VgIGRpcmVjdGx5XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiAjIyMgLmNvbXBhdGlibGVNZXNzYWdlKHRocm93biwgZXJyTWF0Y2hlcilcbiAqXG4gKiBDaGVja3MgaWYgYW4gZXJyb3IncyBtZXNzYWdlIGlzIGNvbXBhdGlibGUgd2l0aCBhIG1hdGNoZXIgKFN0cmluZyBvciBSZWdFeHApLlxuICogSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIFN0cmluZyBvciBwYXNzZXMgdGhlIFJlZ0V4cCB0ZXN0LFxuICogaXQgaXMgY29uc2lkZXJlZCBjb21wYXRpYmxlLlxuICpcbiAqIEBuYW1lIGNvbXBhdGlibGVNZXNzYWdlXG4gKiBAcGFyYW0ge0Vycm9yfSB0aHJvd24gZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gZXJyTWF0Y2hlciB0byBsb29rIGZvciBpbnRvIHRoZSBtZXNzYWdlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvbXBhdGlibGVNZXNzYWdlKHRocm93biwgZXJyTWF0Y2hlcikge1xuICB2YXIgY29tcGFyaXNvblN0cmluZyA9IHR5cGVvZiB0aHJvd24gPT09ICdzdHJpbmcnID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChlcnJNYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIGVyck1hdGNoZXIudGVzdChjb21wYXJpc29uU3RyaW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyTWF0Y2hlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogIyMjIC5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKVxuICpcbiAqIEdldHMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgZm9yIGFuIEVycm9yIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yIGl0c2VsZi5cbiAqXG4gKiBAbmFtZSBnZXRDb25zdHJ1Y3Rvck5hbWVcbiAqIEBwYXJhbSB7RXJyb3J8RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpIHtcbiAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZTtcbiAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZ2V0RnVuY3Rpb25OYW1lKGVycm9yTGlrZS5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGBlcnJgIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBFcnJvciBpdCBpcyBhbiBlcnJvciBjb25zdHJ1Y3RvciBpdHNlbGYgb3IgYW5vdGhlciBmdW5jdGlvbi5cbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBjb21tb24gZnVuY3Rpb24gd2UgZ2V0IGl0cyBuYW1lLCBvdGhlcndpc2Ugd2UgbWF5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlXG4gICAgLy8gb2YgdGhlIGVycm9yIGp1c3QgaW4gY2FzZSBpdCdzIGEgcG9vcmx5LWNvbnN0cnVjdGVkIGVycm9yLiBQbGVhc2Ugc2VlIGNoYWlqcy9jaGFpL2lzc3Vlcy80NSB0byBrbm93IG1vcmUuXG4gICAgY29uc3RydWN0b3JOYW1lID0gZ2V0RnVuY3Rpb25OYW1lKGVycm9yTGlrZSk7XG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gJycpIHtcbiAgICAgIHZhciBuZXdDb25zdHJ1Y3Rvck5hbWUgPSBnZXRGdW5jdGlvbk5hbWUobmV3IGVycm9yTGlrZSgpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBuZXdDb25zdHJ1Y3Rvck5hbWUgfHwgY29uc3RydWN0b3JOYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG59XG5cbi8qKlxuICogIyMjIC5nZXRNZXNzYWdlKGVycm9yTGlrZSlcbiAqXG4gKiBHZXRzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gYW4gZXJyb3IuXG4gKiBJZiBgZXJyYCBpcyBhIFN0cmluZyBpdHNlbGYsIHdlIHJldHVybiBpdC5cbiAqIElmIHRoZSBlcnJvciBoYXMgbm8gbWVzc2FnZSwgd2UgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBAbmFtZSBnZXRNZXNzYWdlXG4gKiBAcGFyYW0ge0Vycm9yfFN0cmluZ30gZXJyb3JMaWtlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2UoZXJyb3JMaWtlKSB7XG4gIHZhciBtc2cgPSAnJztcbiAgaWYgKGVycm9yTGlrZSAmJiBlcnJvckxpa2UubWVzc2FnZSkge1xuICAgIG1zZyA9IGVycm9yTGlrZS5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09ICdzdHJpbmcnKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG5cbiAgcmV0dXJuIG1zZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBhdGlibGVJbnN0YW5jZTogY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlQ29uc3RydWN0b3I6IGNvbXBhdGlibGVDb25zdHJ1Y3RvcixcbiAgY29tcGF0aWJsZU1lc3NhZ2U6IGNvbXBhdGlibGVNZXNzYWdlLFxuICBnZXRNZXNzYWdlOiBnZXRNZXNzYWdlLFxuICBnZXRDb25zdHJ1Y3Rvck5hbWU6IGdldENvbnN0cnVjdG9yTmFtZSxcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gaXNOYU4gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNSBTYWt0aGlwcml5YW4gVmFpcmFtYW5pIDx0aGVjaGFyZ2luZ3ZvbGNhbm9AZ21haWwuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmlzTmFOKHZhbHVlKVxuICpcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgTmFOIG9yIG5vdC5cbiAqXG4gKiAgICAgdXRpbHMuaXNOYU4oTmFOKTsgLy8gdHJ1ZVxuICpcbiAqIEBwYXJhbSB7VmFsdWV9IFRoZSB2YWx1ZSB3aGljaCBoYXMgdG8gYmUgY2hlY2tlZCBpZiBpdCBpcyBOYU5cbiAqIEBuYW1lIGlzTmFOXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBSZWZlciBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNuYW4tbnVtYmVyXG4gIC8vIHNlY3Rpb24ncyBOT1RFLlxuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG4vLyBJZiBFQ01BU2NyaXB0IDYncyBOdW1iZXIuaXNOYU4gaXMgcHJlc2VudCwgcHJlZmVyIHRoYXQuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc05hTiB8fCBpc05hTjtcbiIsICJ2YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZShvYmopIHtcbiAgdmFyIG9iamVjdFR5cGUgPSB0eXBlKG9iaik7XG4gIHZhciBvYmplY3RUeXBlcyA9IFsnQXJyYXknLCAnT2JqZWN0JywgJ2Z1bmN0aW9uJ107XG5cbiAgcmV0dXJuIG9iamVjdFR5cGVzLmluZGV4T2Yob2JqZWN0VHlwZSkgIT09IC0xO1xufVxuXG4vKipcbiAqICMjIyAuZ2V0T3BlcmF0b3IobWVzc2FnZSlcbiAqXG4gKiBFeHRyYWN0IHRoZSBvcGVyYXRvciBmcm9tIGVycm9yIG1lc3NhZ2UuXG4gKiBPcGVyYXRvciBkZWZpbmVkIGlzIGJhc2VkIG9uIGJlbG93IGxpbmtcbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvYXNzZXJ0Lmh0bWwjYXNzZXJ0X2Fzc2VydC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBgb3BlcmF0b3JgIG9yIGB1bmRlZmluZWRgIHZhbHVlIGZvciBhbiBBc3NlcnRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uKVxuICogQHBhcmFtIHtBcmd1bWVudHN9IGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgYXJndW1lbnRzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRPcGVyYXRvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICB2YXIgb3BlcmF0b3IgPSBmbGFnKG9iaiwgJ29wZXJhdG9yJyk7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgJ25lZ2F0ZScpO1xuICB2YXIgZXhwZWN0ZWQgPSBhcmdzWzNdO1xuICB2YXIgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV07XG5cbiAgaWYgKG9wZXJhdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIG1zZyA9IG1zZygpO1xuXG4gIG1zZyA9IG1zZyB8fCAnJztcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKC9cXHNoYXZlXFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIGlzT2JqZWN0ID0gaXNPYmplY3RUeXBlKGV4cGVjdGVkKTtcbiAgaWYgKC9cXHNub3RcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiBpc09iamVjdCA/ICdub3REZWVwU3RyaWN0RXF1YWwnIDogJ25vdFN0cmljdEVxdWFsJztcbiAgfVxuXG4gIHJldHVybiBpc09iamVjdCA/ICdkZWVwU3RyaWN0RXF1YWwnIDogJ3N0cmljdEVxdWFsJztcbn07XG4iLCAiLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogRGVwZW5kZW5jaWVzIHRoYXQgYXJlIHVzZWQgZm9yIG11bHRpcGxlIGV4cG9ydHMgYXJlIHJlcXVpcmVkIGhlcmUgb25seSBvbmNlXG4gKi9cblxudmFyIHBhdGh2YWwgPSByZXF1aXJlKCdwYXRodmFsJyk7XG5cbi8qIVxuICogdGVzdCB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy50ZXN0ID0gcmVxdWlyZSgnLi90ZXN0Jyk7XG5cbi8qIVxuICogdHlwZSB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy50eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcblxuLyohXG4gKiBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKi9cbmV4cG9ydHMuZXhwZWN0VHlwZXMgPSByZXF1aXJlKCcuL2V4cGVjdFR5cGVzJyk7XG5cbi8qIVxuICogbWVzc2FnZSB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5nZXRNZXNzYWdlID0gcmVxdWlyZSgnLi9nZXRNZXNzYWdlJyk7XG5cbi8qIVxuICogYWN0dWFsIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmdldEFjdHVhbCA9IHJlcXVpcmUoJy4vZ2V0QWN0dWFsJyk7XG5cbi8qIVxuICogSW5zcGVjdCB1dGlsXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0ID0gcmVxdWlyZSgnLi9pbnNwZWN0Jyk7XG5cbi8qIVxuICogT2JqZWN0IERpc3BsYXkgdXRpbFxuICovXG5cbmV4cG9ydHMub2JqRGlzcGxheSA9IHJlcXVpcmUoJy4vb2JqRGlzcGxheScpO1xuXG4vKiFcbiAqIEZsYWcgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG4vKiFcbiAqIEZsYWcgdHJhbnNmZXJyaW5nIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyohXG4gKiBEZWVwIGVxdWFsIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmVxbCA9IHJlcXVpcmUoJ2RlZXAtZXFsJyk7XG5cbi8qIVxuICogRGVlcCBwYXRoIGluZm9cbiAqL1xuXG5leHBvcnRzLmdldFBhdGhJbmZvID0gcGF0aHZhbC5nZXRQYXRoSW5mbztcblxuLyohXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IGV4aXN0c1xuICovXG5cbmV4cG9ydHMuaGFzUHJvcGVydHkgPSBwYXRodmFsLmhhc1Byb3BlcnR5O1xuXG4vKiFcbiAqIEZ1bmN0aW9uIG5hbWVcbiAqL1xuXG5leHBvcnRzLmdldE5hbWUgPSByZXF1aXJlKCdnZXQtZnVuYy1uYW1lJyk7XG5cbi8qIVxuICogYWRkIFByb3BlcnR5XG4gKi9cblxuZXhwb3J0cy5hZGRQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vYWRkUHJvcGVydHknKTtcblxuLyohXG4gKiBhZGQgTWV0aG9kXG4gKi9cblxuZXhwb3J0cy5hZGRNZXRob2QgPSByZXF1aXJlKCcuL2FkZE1ldGhvZCcpO1xuXG4vKiFcbiAqIG92ZXJ3cml0ZSBQcm9wZXJ0eVxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL292ZXJ3cml0ZVByb3BlcnR5Jyk7XG5cbi8qIVxuICogb3ZlcndyaXRlIE1ldGhvZFxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlTWV0aG9kID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVNZXRob2QnKTtcblxuLyohXG4gKiBBZGQgYSBjaGFpbmFibGUgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5hZGRDaGFpbmFibGVNZXRob2QgPSByZXF1aXJlKCcuL2FkZENoYWluYWJsZU1ldGhvZCcpO1xuXG4vKiFcbiAqIE92ZXJ3cml0ZSBjaGFpbmFibGUgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSByZXF1aXJlKCcuL292ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCcpO1xuXG4vKiFcbiAqIENvbXBhcmUgYnkgaW5zcGVjdCBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmNvbXBhcmVCeUluc3BlY3QgPSByZXF1aXJlKCcuL2NvbXBhcmVCeUluc3BlY3QnKTtcblxuLyohXG4gKiBHZXQgb3duIGVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scyBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMgPSByZXF1aXJlKCcuL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMnKTtcblxuLyohXG4gKiBHZXQgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcycpO1xuXG4vKiFcbiAqIENoZWNrcyBlcnJvciBhZ2FpbnN0IGEgZ2l2ZW4gc2V0IG9mIGNyaXRlcmlhXG4gKi9cblxuZXhwb3J0cy5jaGVja0Vycm9yID0gcmVxdWlyZSgnY2hlY2stZXJyb3InKTtcblxuLyohXG4gKiBQcm94aWZ5IHV0aWxcbiAqL1xuXG5leHBvcnRzLnByb3hpZnkgPSByZXF1aXJlKCcuL3Byb3hpZnknKTtcblxuLyohXG4gKiBhZGRMZW5ndGhHdWFyZCB1dGlsXG4gKi9cblxuZXhwb3J0cy5hZGRMZW5ndGhHdWFyZCA9IHJlcXVpcmUoJy4vYWRkTGVuZ3RoR3VhcmQnKTtcblxuLyohXG4gKiBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqL1xuXG5leHBvcnRzLmlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xuXG4vKiFcbiAqIGlzTmFOIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuaXNOYU4gPSByZXF1aXJlKCcuL2lzTmFOJyk7XG5cbi8qIVxuICogZ2V0T3BlcmF0b3IgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5nZXRPcGVyYXRvciA9IHJlcXVpcmUoJy4vZ2V0T3BlcmF0b3InKTsiLCAiLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjb25maWcgPSByZXF1aXJlKCcuL2NvbmZpZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChfY2hhaSwgdXRpbCkge1xuICAvKiFcbiAgICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAgICovXG5cbiAgdmFyIEFzc2VydGlvbkVycm9yID0gX2NoYWkuQXNzZXJ0aW9uRXJyb3JcbiAgICAsIGZsYWcgPSB1dGlsLmZsYWc7XG5cbiAgLyohXG4gICAqIE1vZHVsZSBleHBvcnQuXG4gICAqL1xuXG4gIF9jaGFpLkFzc2VydGlvbiA9IEFzc2VydGlvbjtcblxuICAvKiFcbiAgICogQXNzZXJ0aW9uIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIENyZWF0ZXMgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICpcbiAgICogYEFzc2VydGlvbmAgb2JqZWN0cyBjb250YWluIG1ldGFkYXRhIGluIHRoZSBmb3JtIG9mIGZsYWdzLiBUaHJlZSBmbGFncyBjYW5cbiAgICogYmUgYXNzaWduZWQgZHVyaW5nIGluc3RhbnRpYXRpb24gYnkgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhpcyBjb25zdHJ1Y3RvcjpcbiAgICpcbiAgICogLSBgb2JqZWN0YDogVGhpcyBmbGFnIGNvbnRhaW5zIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRm9yIGV4YW1wbGUsIGluXG4gICAqICAgdGhlIGFzc2VydGlvbiBgZXhwZWN0KG51bUtpdHRlbnMpLnRvLmVxdWFsKDcpO2AsIHRoZSBgb2JqZWN0YCBmbGFnIHdpbGxcbiAgICogICBjb250YWluIGBudW1LaXR0ZW5zYCBzbyB0aGF0IHRoZSBgZXF1YWxgIGFzc2VydGlvbiBjYW4gcmVmZXJlbmNlIGl0IHdoZW5cbiAgICogICBuZWVkZWQuXG4gICAqXG4gICAqIC0gYG1lc3NhZ2VgOiBUaGlzIGZsYWcgY29udGFpbnMgYW4gb3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gYmVcbiAgICogICBwcmVwZW5kZWQgdG8gdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCdzIGdlbmVyYXRlZCBieSB0aGUgYXNzZXJ0aW9uIHdoZW4gaXRcbiAgICogICBmYWlscy5cbiAgICpcbiAgICogLSBgc3NmaWA6IFRoaXMgZmxhZyBzdGFuZHMgZm9yIFwic3RhcnQgc3RhY2sgZnVuY3Rpb24gaW5kaWNhdG9yXCIuIEl0XG4gICAqICAgY29udGFpbnMgYSBmdW5jdGlvbiByZWZlcmVuY2UgdGhhdCBzZXJ2ZXMgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvclxuICAgKiAgIHJlbW92aW5nIGZyYW1lcyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IgdGhhdCdzIGNyZWF0ZWQgYnkgdGhlXG4gICAqICAgYXNzZXJ0aW9uIHdoZW4gaXQgZmFpbHMuIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgYSBjbGVhbmVyIHN0YWNrIHRyYWNlIHRvXG4gICAqICAgZW5kIHVzZXJzIGJ5IHJlbW92aW5nIENoYWkncyBpbnRlcm5hbCBmdW5jdGlvbnMuIE5vdGUgdGhhdCBpdCBvbmx5IHdvcmtzXG4gICAqICAgaW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VgLCBhbmQgb25seSB3aGVuXG4gICAqICAgYENoYWkuY29uZmlnLmluY2x1ZGVTdGFja2AgaGFzbid0IGJlZW4gc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIC0gYGxvY2tTc2ZpYDogVGhpcyBmbGFnIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBgc3NmaWAgZmxhZ1xuICAgKiAgIHNob3VsZCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWUsIGV2ZW4gYXMgYXNzZXJ0aW9ucyBhcmUgY2hhaW5lZCBvZmYgb2ZcbiAgICogICB0aGlzIG9iamVjdC4gVGhpcyBpcyB1c3VhbGx5IHNldCB0byBgdHJ1ZWAgd2hlbiBjcmVhdGluZyBhIG5ldyBhc3NlcnRpb25cbiAgICogICBmcm9tIHdpdGhpbiBhbm90aGVyIGFzc2VydGlvbi4gSXQncyBhbHNvIHRlbXBvcmFyaWx5IHNldCB0byBgdHJ1ZWAgYmVmb3JlXG4gICAqICAgYW4gb3ZlcndyaXR0ZW4gYXNzZXJ0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uXG4gICAqXG4gICAqIC0gYGVxbGA6IFRoaXMgZmxhZyBjb250YWlucyB0aGUgZGVlcEVxdWFsIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYnkgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqIHRhcmdldCBvZiB0aGUgYXNzZXJ0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgKG9wdGlvbmFsKSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzc2ZpIChvcHRpb25hbCkgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIHN0YWNrIGZyYW1lc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGxvY2tTc2ZpIChvcHRpb25hbCkgd2hldGhlciBvciBub3QgdGhlIHNzZmkgZmxhZyBpcyBsb2NrZWRcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIEFzc2VydGlvbiAob2JqLCBtc2csIHNzZmksIGxvY2tTc2ZpKSB7XG4gICAgZmxhZyh0aGlzLCAnc3NmaScsIHNzZmkgfHwgQXNzZXJ0aW9uKTtcbiAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIGxvY2tTc2ZpKTtcbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBvYmopO1xuICAgIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIGZsYWcodGhpcywgJ2VxbCcsIGNvbmZpZy5kZWVwRXF1YWwgfHwgdXRpbC5lcWwpO1xuXG4gICAgcmV0dXJuIHV0aWwucHJveGlmeSh0aGlzKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sICdpbmNsdWRlU3RhY2snLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXNzZXJ0aW9uLCAnc2hvd0RpZmYnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgY29uZmlnLnNob3dEaWZmID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLmFkZFByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwuYWRkTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHV0aWwuYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdXRpbC5vdmVyd3JpdGVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLm92ZXJ3cml0ZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgICB1dGlsLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmFzc2VydChleHByZXNzaW9uLCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlLCBleHBlY3RlZCwgYWN0dWFsLCBzaG93RGlmZilcbiAgICpcbiAgICogRXhlY3V0ZXMgYW4gZXhwcmVzc2lvbiBhbmQgY2hlY2sgZXhwZWN0YXRpb25zLiBUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgZm9yIHJlcG9ydGluZyBpZiB0ZXN0IGRvZXNuJ3QgcGFzcy5cbiAgICpcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBwYXJhbSB7UGhpbG9zb3BoaWNhbH0gZXhwcmVzc2lvbiB0byBiZSB0ZXN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG1lc3NhZ2Ugb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG1lc3NhZ2UgdG8gZGlzcGxheSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBuZWdhdGVkTWVzc2FnZSBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbmVnYXRlZE1lc3NhZ2UgdG8gZGlzcGxheSBpZiBuZWdhdGVkIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWQgdmFsdWUgKHJlbWVtYmVyIHRvIGNoZWNrIGZvciBuZWdhdGlvbilcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsIChvcHRpb25hbCkgd2lsbCBkZWZhdWx0IHRvIGB0aGlzLm9iamBcbiAgICogQHBhcmFtIHtCb29sZWFufSBzaG93RGlmZiAob3B0aW9uYWwpIHdoZW4gc2V0IHRvIGB0cnVlYCwgYXNzZXJ0IHdpbGwgZGlzcGxheSBhIGRpZmYgaW4gYWRkaXRpb24gdG8gdGhlIG1lc3NhZ2UgaWYgZXhwcmVzc2lvbiBmYWlsc1xuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICAgIHZhciBvayA9IHV0aWwudGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpIHNob3dEaWZmID0gdHJ1ZTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBleHBlY3RlZCAmJiB1bmRlZmluZWQgPT09IF9hY3R1YWwpIHNob3dEaWZmID0gZmFsc2U7XG4gICAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZikgc2hvd0RpZmYgPSBmYWxzZTtcblxuICAgIGlmICghb2spIHtcbiAgICAgIG1zZyA9IHV0aWwuZ2V0TWVzc2FnZSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdmFyIGFjdHVhbCA9IHV0aWwuZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB2YXIgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICwgc2hvd0RpZmY6IHNob3dEaWZmXG4gICAgICB9O1xuXG4gICAgICB2YXIgb3BlcmF0b3IgPSB1dGlsLmdldE9wZXJhdG9yKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgbXNnLFxuICAgICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMsXG4gICAgICAgIChjb25maWcuaW5jbHVkZVN0YWNrKSA/IHRoaXMuYXNzZXJ0IDogZmxhZyh0aGlzLCAnc3NmaScpKTtcbiAgICB9XG4gIH07XG5cbiAgLyohXG4gICAqICMjIyAuX29ialxuICAgKlxuICAgKiBRdWljayByZWZlcmVuY2UgdG8gc3RvcmVkIGBhY3R1YWxgIHZhbHVlIGZvciBwbHVnaW4gZGV2ZWxvcGVycy5cbiAgICpcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24ucHJvdG90eXBlLCAnX29iaicsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgICAgfVxuICAgICwgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIHZhbCk7XG4gICAgICB9XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIGh0dHA6Ly9jaGFpanMuY29tXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2hhaSwgXykge1xuICB2YXIgQXNzZXJ0aW9uID0gY2hhaS5Bc3NlcnRpb25cbiAgICAsIEFzc2VydGlvbkVycm9yID0gY2hhaS5Bc3NlcnRpb25FcnJvclxuICAgICwgZmxhZyA9IF8uZmxhZztcblxuICAvKipcbiAgICogIyMjIExhbmd1YWdlIENoYWluc1xuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGFyZSBwcm92aWRlZCBhcyBjaGFpbmFibGUgZ2V0dGVycyB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eVxuICAgKiBvZiB5b3VyIGFzc2VydGlvbnMuXG4gICAqXG4gICAqICoqQ2hhaW5zKipcbiAgICpcbiAgICogLSB0b1xuICAgKiAtIGJlXG4gICAqIC0gYmVlblxuICAgKiAtIGlzXG4gICAqIC0gdGhhdFxuICAgKiAtIHdoaWNoXG4gICAqIC0gYW5kXG4gICAqIC0gaGFzXG4gICAqIC0gaGF2ZVxuICAgKiAtIHdpdGhcbiAgICogLSBhdFxuICAgKiAtIG9mXG4gICAqIC0gc2FtZVxuICAgKiAtIGJ1dFxuICAgKiAtIGRvZXNcbiAgICogLSBzdGlsbFxuICAgKiAtIGFsc29cbiAgICpcbiAgICogQG5hbWUgbGFuZ3VhZ2UgY2hhaW5zXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIFsgJ3RvJywgJ2JlJywgJ2JlZW4nLCAnaXMnXG4gICwgJ2FuZCcsICdoYXMnLCAnaGF2ZScsICd3aXRoJ1xuICAsICd0aGF0JywgJ3doaWNoJywgJ2F0JywgJ29mJ1xuICAsICdzYW1lJywgJ2J1dCcsICdkb2VzJywgJ3N0aWxsJywgXCJhbHNvXCIgXS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFpbikge1xuICAgIEFzc2VydGlvbi5hZGRQcm9wZXJ0eShjaGFpbik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFxuICAgKlxuICAgKiBOZWdhdGVzIGFsbCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbi5cbiAgICpcbiAgICogICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7fSkudG8ubm90LnRocm93KCk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5kb2VzLm5vdC5pbmNsdWRlKDMpO1xuICAgKlxuICAgKiBKdXN0IGJlY2F1c2UgeW91IGNhbiBuZWdhdGUgYW55IGFzc2VydGlvbiB3aXRoIGAubm90YCBkb2Vzbid0IG1lYW4geW91XG4gICAqIHNob3VsZC4gV2l0aCBncmVhdCBwb3dlciBjb21lcyBncmVhdCByZXNwb25zaWJpbGl0eS4gSXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IHRoZSBvbmUgZXhwZWN0ZWQgb3V0cHV0IHdhcyBwcm9kdWNlZCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nXG4gICAqIHRoYXQgb25lIG9mIGNvdW50bGVzcyB1bmV4cGVjdGVkIG91dHB1dHMgd2Fzbid0IHByb2R1Y2VkLiBTZWUgaW5kaXZpZHVhbFxuICAgKiBhc3NlcnRpb25zIGZvciBzcGVjaWZpYyBndWlkYW5jZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuZXF1YWwoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBAbmFtZSBub3RcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdub3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnbmVnYXRlJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmVxdWFsYCwgYC5pbmNsdWRlYCwgYC5tZW1iZXJzYCwgYC5rZXlzYCwgYW5kIGAucHJvcGVydHlgXG4gICAqIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQgb2Ygc3RyaWN0XG4gICAqIChgPT09YCkgZXF1YWxpdHkuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXBcbiAgICogZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFscyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZGVlcC5lcXVhbCh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmVxdWFsKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5kZWVwLmluY2x1ZGUoe2E6IDF9KTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmluY2x1ZGUoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5kZWVwLmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMgbWVtYmVyIGB7YTogMX1gXG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmhhdmUubWVtYmVycyhbe2E6IDF9XSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgc2V0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIGtleSBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoW3thOiAxfV0pKS50by5oYXZlLmRlZXAua2V5cyhbe2E6IDF9XSk7XG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLm5vdC5oYXZlLmtleXMoW3thOiAxfV0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBwcm9wZXJ0eSBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdkZWVwJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2RlZXAnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubmVzdGVkXG4gICAqXG4gICAqIEVuYWJsZXMgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBpbiBhbGwgYC5wcm9wZXJ0eWAgYW5kIGAuaW5jbHVkZWBcbiAgICogYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4uXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KCdhLmJbMV0nKTtcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8ubmVzdGVkLmluY2x1ZGUoeydhLmJbMV0nOiAneSd9KTtcbiAgICpcbiAgICogSWYgYC5gIG9yIGBbXWAgYXJlIHBhcnQgb2YgYW4gYWN0dWFsIHByb3BlcnR5IG5hbWUsIHRoZXkgY2FuIGJlIGVzY2FwZWQgYnlcbiAgICogYWRkaW5nIHR3byBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlbS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7Jy5hJzogeydbYl0nOiAneCd9fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ1xcXFwuYS5cXFxcW2JcXFxcXScpO1xuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5uZXN0ZWQuaW5jbHVkZSh7J1xcXFwuYS5cXFxcW2JcXFxcXSc6ICd4J30pO1xuICAgKlxuICAgKiBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC5vd25gLlxuICAgKlxuICAgKiBAbmFtZSBuZXN0ZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCduZXN0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnbmVzdGVkJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blxuICAgKlxuICAgKiBDYXVzZXMgYWxsIGAucHJvcGVydHlgIGFuZCBgLmluY2x1ZGVgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluXG4gICAqIHRvIGlnbm9yZSBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93bi5wcm9wZXJ0eSgnYScpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5vd24uaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZSh7YjogMn0pLmJ1dC5ub3Qub3duLmluY2x1ZGUoe2I6IDJ9KTtcbiAgICpcbiAgICogYC5vd25gIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAubmVzdGVkYC5cbiAgICpcbiAgICogQG5hbWUgb3duXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnb3duJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ293bicsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5vcmRlcmVkXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5tZW1iZXJzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXRcbiAgICogbWVtYmVycyBiZSBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmhhdmUub3JkZXJlZC5tZW1iZXJzKFsxLCAyXSlcbiAgICogICAgICAgLmJ1dC5ub3QuaGF2ZS5vcmRlcmVkLm1lbWJlcnMoWzIsIDFdKTtcbiAgICpcbiAgICogV2hlbiBgLmluY2x1ZGVgIGFuZCBgLm9yZGVyZWRgIGFyZSBjb21iaW5lZCwgdGhlIG9yZGVyaW5nIGJlZ2lucyBhdCB0aGVcbiAgICogc3RhcnQgb2YgYm90aCBhcnJheXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhbMSwgMl0pXG4gICAqICAgICAgIC5idXQubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKFsyLCAzXSk7XG4gICAqXG4gICAqIEBuYW1lIG9yZGVyZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvcmRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ29yZGVyZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYW55XG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBvbmx5IHJlcXVpcmUgdGhhdFxuICAgKiB0aGUgdGFyZ2V0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBnaXZlbiBrZXlzLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZlxuICAgKiBgLmFsbGAsIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIHRhcmdldCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4ga2V5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogU2VlIHRoZSBgLmtleXNgIGRvYyBmb3IgZ3VpZGFuY2Ugb24gd2hlbiB0byB1c2UgYC5hbnlgIG9yIGAuYWxsYC5cbiAgICpcbiAgICogQG5hbWUgYW55XG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYW55JywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2FueScsIHRydWUpO1xuICAgIGZsYWcodGhpcywgJ2FsbCcsIGZhbHNlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYWxsXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXQgdGhlXG4gICAqIHRhcmdldCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4ga2V5cy4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgYC5hbnlgLCB3aGljaFxuICAgKiBvbmx5IHJlcXVpcmVzIHRoYXQgdGhlIHRhcmdldCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW4ga2V5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYC5hbGxgIGlzIHVzZWQgYnkgZGVmYXVsdCB3aGVuIG5laXRoZXIgYC5hbGxgIG5vciBgLmFueWAgYXJlXG4gICAqIGFkZGVkIGVhcmxpZXIgaW4gdGhlIGNoYWluLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYWRkIGAuYWxsYCBhbnl3YXlcbiAgICogYmVjYXVzZSBpdCBpbXByb3ZlcyByZWFkYWJpbGl0eS5cbiAgICpcbiAgICogU2VlIHRoZSBgLmtleXNgIGRvYyBmb3IgZ3VpZGFuY2Ugb24gd2hlbiB0byB1c2UgYC5hbnlgIG9yIGAuYWxsYC5cbiAgICpcbiAgICogQG5hbWUgYWxsXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYWxsJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2FsbCcsIHRydWUpO1xuICAgIGZsYWcodGhpcywgJ2FueScsIGZhbHNlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYSh0eXBlWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQncyB0eXBlIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBzdHJpbmcgYHR5cGVgLiBUeXBlc1xuICAgKiBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4gU2VlIHRoZSBgdHlwZS1kZXRlY3RgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGVcbiAgICogdHlwZSBkZXRlY3Rpb24gYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL3R5cGUtZGV0ZWN0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmJlLmFuKCdvYmplY3QnKTtcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5hKCdudWxsJyk7XG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5iZS5hbigndW5kZWZpbmVkJyk7XG4gICAqICAgICBleHBlY3QobmV3IEVycm9yKS50by5iZS5hbignZXJyb3InKTtcbiAgICogICAgIGV4cGVjdChQcm9taXNlLnJlc29sdmUoKSkudG8uYmUuYSgncHJvbWlzZScpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBGbG9hdDMyQXJyYXkpLnRvLmJlLmEoJ2Zsb2F0MzJhcnJheScpO1xuICAgKiAgICAgZXhwZWN0KFN5bWJvbCgpKS50by5iZS5hKCdzeW1ib2wnKTtcbiAgICpcbiAgICogYC5hYCBzdXBwb3J0cyBvYmplY3RzIHRoYXQgaGF2ZSBhIGN1c3RvbSB0eXBlIHNldCB2aWEgYFN5bWJvbC50b1N0cmluZ1RhZ2AuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7XG4gICAqICAgICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnbXlDdXN0b21UeXBlJ1xuICAgKiAgICAgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChteU9iaikudG8uYmUuYSgnbXlDdXN0b21UeXBlJykuYnV0Lm5vdC5hbignb2JqZWN0Jyk7XG4gICAqXG4gICAqIEl0J3Mgb2Z0ZW4gYmVzdCB0byB1c2UgYC5hYCB0byBjaGVjayBhIHRhcmdldCdzIHR5cGUgYmVmb3JlIG1ha2luZyBtb3JlXG4gICAqIGFzc2VydGlvbnMgb24gdGhlIHNhbWUgdGFyZ2V0LiBUaGF0IHdheSwgeW91IGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZnJvbVxuICAgKiBhbnkgYXNzZXJ0aW9uIHRoYXQgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pbmNsdWRlcygyKTtcbiAgICogICAgIGV4cGVjdChbXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pcy5lbXB0eTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5hYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgdGhlIGV4cGVjdGVkIHR5cGUsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0XG4gICAqIGlzbid0IG9uZSBvZiBtYW55IHVuZXhwZWN0ZWQgdHlwZXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuYW4oJ2FycmF5Jyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmFgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSB0b1xuICAgKiBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZFxuICAgKiBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hKCdzdHJpbmcnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgKlxuICAgKiBgLmFgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBsYW5ndWFnZSBjaGFpbiB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eSBvZlxuICAgKiB5b3VyIGFzc2VydGlvbnMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5oYXZlLmEucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuYWAuXG4gICAqXG4gICAqIEBuYW1lIGFcbiAgICogQGFsaWFzIGFuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhbiAodHlwZSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgYXJ0aWNsZSA9IH5bICdhJywgJ2UnLCAnaScsICdvJywgJ3UnIF0uaW5kZXhPZih0eXBlLmNoYXJBdCgwKSkgPyAnYW4gJyA6ICdhICc7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdHlwZSA9PT0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSAnICsgYXJ0aWNsZSArIHR5cGVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlICcgKyBhcnRpY2xlICsgdHlwZVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdhbicsIGFuKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnYScsIGFuKTtcblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlKHZhbFssIG1zZ10pXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIHN0cmluZywgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIHN0cmluZyBgdmFsYFxuICAgKiBpcyBhIHN1YnN0cmluZyBvZiB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5pbmNsdWRlKCdmb28nKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGFuIGFycmF5LCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gYHZhbGAgaXMgYVxuICAgKiBtZW1iZXIgb2YgdGhlIHRhcmdldC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUoMik7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhbiBvYmplY3QsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBvYmplY3RcbiAgICogYHZhbGAncyBwcm9wZXJ0aWVzIGFyZSBhIHN1YnNldCBvZiB0aGUgdGFyZ2V0J3MgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUoe2E6IDEsIGI6IDJ9KTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgU2V0IG9yIFdlYWtTZXQsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBhXG4gICAqIG1lbWJlciBvZiB0aGUgdGFyZ2V0LiBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDJdKSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgTWFwLCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gYHZhbGAgaXMgb25lIG9mXG4gICAqIHRoZSB2YWx1ZXMgb2YgdGhlIHRhcmdldC4gU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG0gaXMgdXNlZC5cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgTWFwKFtbJ2EnLCAxXSwgWydiJywgMl1dKSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogQmVjYXVzZSBgLmluY2x1ZGVgIGRvZXMgZGlmZmVyZW50IHRoaW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0J3MgdHlwZSwgaXQnc1xuICAgKiBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlIHVzaW5nIGAuaW5jbHVkZWAuIFNlZSB0aGUgYC5hYFxuICAgKiBkb2MgZm9yIGluZm8gb24gdGVzdGluZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5iZS5hbignYXJyYXknKS50aGF0LmluY2x1ZGVzKDIpO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eSBpcyB1c2VkIHRvIGNvbXBhcmUgYXJyYXkgbWVtYmVycyBhbmRcbiAgICogb2JqZWN0IHByb3BlcnRpZXMuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5XG4gICAqIGluc3RlYWQgKFdlYWtTZXQgdGFyZ2V0cyBhcmUgbm90IHN1cHBvcnRlZCkuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0XG4gICAqIHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaW5jbHVkZXMgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uZGVlcC5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLm5vdC5pbmNsdWRlKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaW5jbHVkZXMgYHg6IHthOiAxfWBcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uZGVlcC5pbmNsdWRlKHt4OiB7YTogMX19KTtcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8ubm90LmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgb2YgdGhlIHRhcmdldCdzIHByb3BlcnRpZXMgYXJlIHNlYXJjaGVkIHdoZW4gd29ya2luZyB3aXRoXG4gICAqIG9iamVjdHMuIFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IGFyZSBpbmhlcml0ZWQgYW5kL29yIG5vbi1lbnVtZXJhYmxlLlxuICAgKiBBZGQgYC5vd25gIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGV4Y2x1ZGUgdGhlIHRhcmdldCdzIGluaGVyaXRlZFxuICAgKiBwcm9wZXJ0aWVzIGZyb20gdGhlIHNlYXJjaC5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5vd24uaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZSh7YjogMn0pLmJ1dC5ub3Qub3duLmluY2x1ZGUoe2I6IDJ9KTtcbiAgICpcbiAgICogTm90ZSB0aGF0IGEgdGFyZ2V0IG9iamVjdCBpcyBhbHdheXMgb25seSBzZWFyY2hlZCBmb3IgYHZhbGAncyBvd25cbiAgICogZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm93bmAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogMn19KS50by5kZWVwLm93bi5pbmNsdWRlKHthOiB7YjogMn19KTtcbiAgICpcbiAgICogQWRkIGAubmVzdGVkYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBlbmFibGUgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiB3aGVuXG4gICAqIHJlZmVyZW5jaW5nIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5uZXN0ZWQuaW5jbHVkZSh7J2EuYlsxXSc6ICd5J30pO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6IDJ9fSkudG8ubmVzdGVkLmluY2x1ZGUoeydcXFxcLmEuXFxcXFtiXFxcXF0nOiAyfSk7XG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAubmVzdGVkYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbe2M6IDN9XX19KS50by5kZWVwLm5lc3RlZC5pbmNsdWRlKHsnYS5iWzBdJzoge2M6IDN9fSk7XG4gICAqXG4gICAqIGAub3duYCBhbmQgYC5uZXN0ZWRgIGNhbm5vdCBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5pbmNsdWRlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubm90LmluY2x1ZGUoJ3RhY28nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5pbmNsdWRlKDQpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5pbmNsdWRlYCB3aGVuIHRoZSB0YXJnZXQgaXMgYW4gb2JqZWN0LlxuICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGVcbiAgICogdGFyZ2V0IG9iamVjdCBkb2Vzbid0IGhhdmUgYWxsIG9mIGB2YWxgJ3Mga2V5L3ZhbHVlIHBhaXJzIGJ1dCBtYXkgb3IgbWF5XG4gICAqIG5vdCBoYXZlIHNvbWUgb2YgdGhlbS4gSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzXG4gICAqIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBvYmplY3QgaXNuJ3QgZXZlbiBleHBlY3RlZCB0byBoYXZlIGB2YWxgJ3Mga2V5cywgaXQnc1xuICAgKiBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2M6IDN9KS50by5ub3QuaGF2ZS5hbnkua2V5cygnYScsICdiJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2M6IDN9KS50by5ub3QuaW5jbHVkZSh7YTogMSwgYjogMn0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IG9iamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIGB2YWxgJ3Mga2V5cywgaXQncyBvZnRlbiBiZXN0IHRvXG4gICAqIGFzc2VydCB0aGF0IGVhY2ggb2YgdGhlIHByb3BlcnRpZXMgaGFzIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgZWFjaCBwcm9wZXJ0eSBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDMsIGI6IDR9KS50by5pbmNsdWRlKHthOiAzLCBiOiA0fSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDMsIGI6IDR9KS50by5ub3QuaW5jbHVkZSh7YTogMSwgYjogMn0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5pbmNsdWRlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlKDQsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNsdWRlKDQpO1xuICAgKlxuICAgKiBgLmluY2x1ZGVgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBsYW5ndWFnZSBjaGFpbiwgY2F1c2luZyBhbGwgYC5tZW1iZXJzYCBhbmRcbiAgICogYC5rZXlzYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoZSB0YXJnZXQgdG8gYmUgYVxuICAgKiBzdXBlcnNldCBvZiB0aGUgZXhwZWN0ZWQgc2V0LCByYXRoZXIgdGhhbiBhbiBpZGVudGljYWwgc2V0LiBOb3RlIHRoYXRcbiAgICogYC5tZW1iZXJzYCBpZ25vcmVzIGR1cGxpY2F0ZXMgaW4gdGhlIHN1YnNldCB3aGVuIGAuaW5jbHVkZWAgaXMgYWRkZWQuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0J3Mga2V5cyBhcmUgYSBzdXBlcnNldCBvZiBbJ2EnLCAnYiddIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDIsIGM6IDN9KS50by5pbmNsdWRlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLm5vdC5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBpcyBhIHN1cGVyc2V0IG9mIFsxLCAyXSBidXQgbm90IGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuaGF2ZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqXG4gICAqICAgICAvLyBEdXBsaWNhdGVzIGluIHRoZSBzdWJzZXQgYXJlIGlnbm9yZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUubWVtYmVycyhbMSwgMiwgMiwgMl0pO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYWRkaW5nIGAuYW55YCBlYXJsaWVyIGluIHRoZSBjaGFpbiBjYXVzZXMgdGhlIGAua2V5c2AgYXNzZXJ0aW9uXG4gICAqIHRvIGlnbm9yZSBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiAgICAgLy8gQm90aCBhc3NlcnRpb25zIGFyZSBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmluY2x1ZGUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAuaW5jbHVkZXNgLCBgLmNvbnRhaW5gLCBhbmQgYC5jb250YWluc2AgY2FuIGJlIHVzZWRcbiAgICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5pbmNsdWRlYC5cbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZVxuICAgKiBAYWxpYXMgY29udGFpblxuICAgKiBAYWxpYXMgaW5jbHVkZXNcbiAgICogQGFsaWFzIGNvbnRhaW5zXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gU2FtZVZhbHVlWmVybyhhLCBiKSB7XG4gICAgcmV0dXJuIChfLmlzTmFOKGEpICYmIF8uaXNOYU4oYikpIHx8IGEgPT09IGI7XG4gIH1cblxuICBmdW5jdGlvbiBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvciAoKSB7XG4gICAgZmxhZyh0aGlzLCAnY29udGFpbnMnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGUgKHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBuZWdhdGUgPSBmbGFnKHRoaXMsICduZWdhdGUnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBkZXNjcmlwdG9yID0gaXNEZWVwID8gJ2RlZXAgJyA6ICcnXG4gICAgICAsIGlzRXFsID0gaXNEZWVwID8gZmxhZyh0aGlzLCAnZXFsJykgOiBTYW1lVmFsdWVaZXJvO1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gICAgdmFyIGluY2x1ZGVkID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWFrc2V0JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICAgIGZsYWdNc2cgKyAndW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldCcsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2V0JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgIGluY2x1ZGVkID0gb2JqLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVGhpcyBibG9jayBpcyBmb3IgYXNzZXJ0aW5nIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgICAgICAvLyBgXy5leHBlY3RUeXBlc2AgaXNuJ3QgdXNlZCBoZXJlIGJlY2F1c2UgYC5pbmNsdWRlYCBzaG91bGQgd29yayB3aXRoXG4gICAgICAgIC8vIG9iamVjdHMgd2l0aCBhIGN1c3RvbSBgQEB0b1N0cmluZ1RhZ2AuXG4gICAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICd0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzICgnXG4gICAgICAgICAgICArIG9ialR5cGUgKyAnIGFuZCAnXG4gICAgICAgICAgICArIF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkgKyAnKSdcbiAgICAgICAgICAgICsgJyBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gJ1xuICAgICAgICAgICAgKyAnWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgJ1xuICAgICAgICAgICAgKyAnb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSAnXG4gICAgICAgICAgICArIF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKHZhbClcbiAgICAgICAgICAsIGZpcnN0RXJyID0gbnVsbFxuICAgICAgICAgICwgbnVtRXJycyA9IDA7XG5cbiAgICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHZhciBwcm9wQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihvYmopO1xuICAgICAgICAgIF8udHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgICBmbGFnKHByb3BBc3NlcnRpb24sICdsb2NrU3NmaScsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICghXy5jaGVja0Vycm9yLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgICAgbnVtRXJycysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgLy8gV2hlbiB2YWxpZGF0aW5nIC5ub3QuaW5jbHVkZSB3aXRoIG11bHRpcGxlIHByb3BlcnRpZXMsIHdlIG9ubHkgd2FudFxuICAgICAgICAvLyB0byB0aHJvdyBhbiBhc3NlcnRpb24gZXJyb3IgaWYgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZCxcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB0aHJvdyB0aGUgZmlyc3QgcHJvcGVydHkgYXNzZXJ0aW9uIGVycm9yIHRoYXQgd2VcbiAgICAgICAgLy8gZW5jb3VudGVyZWQuXG4gICAgICAgIGlmIChuZWdhdGUgJiYgcHJvcHMubGVuZ3RoID4gMSAmJiBudW1FcnJzID09PSBwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdEVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXNzZXJ0IGluY2x1c2lvbiBpbiBjb2xsZWN0aW9uIG9yIHN1YnN0cmluZyBpbiBhIHN0cmluZy5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGluY2x1ZGVkXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvICcgKyBkZXNjcmlwdG9yICsgJ2luY2x1ZGUgJyArIF8uaW5zcGVjdCh2YWwpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCAnICsgZGVzY3JpcHRvciArICdpbmNsdWRlICcgKyBfLmluc3BlY3QodmFsKSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdpbmNsdWRlJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdjb250YWlucycsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnaW5jbHVkZXMnLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5cbiAgLyoqXG4gICAqICMjIyAub2tcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSB0cnV0aHkgdmFsdWUgKGNvbnNpZGVyZWQgYHRydWVgIGluIGJvb2xlYW4gY29udGV4dCkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgb3JcbiAgICogZGVlcGx5IGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub2tgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDApLnRvLmVxdWFsKDApOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDApLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLmZhbHNlOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5ub3QuYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobnVsbCkudG8ubm90LmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5vaztcbiAgICpcbiAgICogQG5hbWUgb2tcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvaycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzeScpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC50cnVlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYHRydWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLmJlLnRydWU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAudHJ1ZWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90XG4gICAqIGVxdWFsIHRvIGB0cnVlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8uYmUuZmFsc2U7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLm5vdC5iZS50cnVlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUudHJ1ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS50cnVlO1xuICAgKlxuICAgKiBAbmFtZSB0cnVlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdHJ1ZSA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2UnXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gZmFsc2UgOiB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZmFsc2VcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5iZS5mYWxzZTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5mYWxzZWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogbm90IGVxdWFsIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5ub3QuYmUuZmFsc2U7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5mYWxzZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZhbHNlO1xuICAgKlxuICAgKiBAbmFtZSBmYWxzZVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2ZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBmYWxzZSA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2UnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWUnXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gdHJ1ZSA6IGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubnVsbFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGBudWxsYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5udWxsO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm51bGxgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuIG5vdFxuICAgKiBlcXVhbCB0byBgbnVsbGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLm51bGw7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUubnVsbDtcbiAgICpcbiAgICogQG5hbWUgbnVsbFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ251bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG51bGwgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGwnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnVuZGVmaW5lZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8uYmUudW5kZWZpbmVkO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnVuZGVmaW5lZGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogbm90IGVxdWFsIHRvIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS51bmRlZmluZWQ7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUudW5kZWZpbmVkO1xuICAgKlxuICAgKiBAbmFtZSB1bmRlZmluZWRcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHVuZGVmaW5lZCA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdW5kZWZpbmVkJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLk5hTlxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBleGFjdGx5IGBOYU5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KE5hTikudG8uYmUuTmFOO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLk5hTmAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90XG4gICAqIGVxdWFsIHRvIGBOYU5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5lcXVhbCgnZm9vJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5iZS5OYU47IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDQyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuTmFOO1xuICAgKlxuICAgKiBAbmFtZSBOYU5cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIF8uaXNOYU4oZmxhZyh0aGlzLCAnb2JqZWN0JykpXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOJ1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU4nXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXhpc3RcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgbm90IHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gZWl0aGVyIGBudWxsYCBvclxuICAgKiBgdW5kZWZpbmVkYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG9cbiAgICogaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCgwKS50by5lcXVhbCgwKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgwKS50by5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXhpc3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobnVsbCkudG8ubm90LmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLm5vdC5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QobnVsbCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmV4aXN0O1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5leGlzdHNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuZXhpc3RgLlxuICAgKlxuICAgKiBAbmFtZSBleGlzdFxuICAgKiBAYWxpYXMgZXhpc3RzXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEV4aXN0ICgpIHtcbiAgICB2YXIgdmFsID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBleGlzdCdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGV4aXN0J1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4aXN0JywgYXNzZXJ0RXhpc3QpO1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4aXN0cycsIGFzc2VydEV4aXN0KTtcblxuICAvKipcbiAgICogIyMjIC5lbXB0eVxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBzdHJpbmcgb3IgYXJyYXksIGAuZW1wdHlgIGFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3NcbiAgICogYGxlbmd0aGAgcHJvcGVydHkgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgMGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoW10pLnRvLmJlLmVtcHR5O1xuICAgKiAgICAgZXhwZWN0KCcnKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbWFwIG9yIHNldCwgYC5lbXB0eWAgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQncyBgc2l6ZWBcbiAgICogcHJvcGVydHkgaXMgc3RyaWN0bHkgZXF1YWwgdG8gYDBgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoKSkudG8uYmUuZW1wdHk7XG4gICAqICAgICBleHBlY3QobmV3IE1hcCgpKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgYC5lbXB0eWAgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXRcbiAgICogZG9lc24ndCBoYXZlIGFueSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBQcm9wZXJ0aWVzIHdpdGggU3ltYm9sLWJhc2VkXG4gICAqIGtleXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvdW50LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt9KS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogQmVjYXVzZSBgLmVtcHR5YCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIHRhcmdldCdzIHR5cGUsIGl0J3NcbiAgICogaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB0YXJnZXQncyB0eXBlIGJlZm9yZSB1c2luZyBgLmVtcHR5YC4gU2VlIHRoZSBgLmFgXG4gICAqIGRvYyBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbXSkudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pcy5lbXB0eTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5lbXB0eWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGNvbnRhaW5zIGl0cyBleHBlY3RlZCBudW1iZXIgb2YgdmFsdWVzLFxuICAgKiByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCdzIG5vdCBlbXB0eS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuYmUuZW1wdHk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDIsIDNdKSkudG8uaGF2ZS5wcm9wZXJ0eSgnc2l6ZScsIDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDIsIDNdKSkudG8ubm90LmJlLmVtcHR5OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChPYmplY3Qua2V5cyh7YTogMX0pKS50by5oYXZlLmxlbmd0aE9mKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmVtcHR5OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5lbXB0eTtcbiAgICpcbiAgICogQG5hbWUgZW1wdHlcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIGl0ZW1zQ291bnQ7XG5cbiAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG5cbiAgICBzd2l0Y2ggKF8udHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICBjYXNlICdzZXQnOlxuICAgICAgICBpdGVtc0NvdW50ID0gdmFsLnNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vha21hcCc6XG4gICAgICBjYXNlICd3ZWFrc2V0JzpcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyAnLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb24nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHZhciBtc2cgPSBmbGFnTXNnICsgJy5lbXB0eSB3YXMgcGFzc2VkIGEgZnVuY3Rpb24gJyArIF8uZ2V0TmFtZSh2YWwpO1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnLnRyaW0oKSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICcuZW1wdHkgd2FzIHBhc3NlZCBub24tc3RyaW5nIHByaW1pdGl2ZSAnICsgXy5pbnNwZWN0KHZhbCksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBzc2ZpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIDAgPT09IGl0ZW1zQ291bnRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHknXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBlbXB0eSdcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hcmd1bWVudHNcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gdGVzdCAoKSB7XG4gICAqICAgICAgIGV4cGVjdChhcmd1bWVudHMpLnRvLmJlLmFyZ3VtZW50cztcbiAgICogICAgIH1cbiAgICpcbiAgICogICAgIHRlc3QoKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5hcmd1bWVudHNgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHdoaWNoIHR5cGUgdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBiZSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgaXRcdTIwMTlzIG5vdCBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuYXJndW1lbnRzOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7fSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFyZ3VtZW50cztcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuQXJndW1lbnRzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmFyZ3VtZW50c2AuXG4gICAqXG4gICAqIEBuYW1lIGFyZ3VtZW50c1xuICAgKiBAYWxpYXMgQXJndW1lbnRzXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzICgpIHtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgdHlwZSA9IF8udHlwZShvYmopO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAnQXJndW1lbnRzJyA9PT0gdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCAnICsgdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2FyZ3VtZW50cycsIGNoZWNrQXJndW1lbnRzKTtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdBcmd1bWVudHMnLCBjaGVja0FyZ3VtZW50cyk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXF1YWwodmFsWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byB0aGUgZ2l2ZW4gYHZhbGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7XG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmVxdWFsKCdmb28nKTtcbiAgICpcbiAgICogQWRkIGAuZGVlcGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZC4gU2VlIHRoZVxuICAgKiBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWxzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5kZWVwLmVxdWFsKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuZXF1YWwoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFscyBgWzEsIDJdYFxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uZGVlcC5lcXVhbChbMSwgMl0pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmVxdWFsKFsxLCAyXSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXF1YWxgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuXG4gICAqIG5vdCBlcXVhbCB0byBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgdmFsdWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5lcXVhbCgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuZXF1YWxgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmVxdWFsKDIpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmVxdWFsc2AgYW5kIGBlcWAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5lcXVhbGAuXG4gICAqXG4gICAqIEBuYW1lIGVxdWFsXG4gICAqIEBhbGlhcyBlcXVhbHNcbiAgICogQGFsaWFzIGVxXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXF1YWwgKHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIGlmIChmbGFnKHRoaXMsICdkZWVwJykpIHtcbiAgICAgIHZhciBwcmV2TG9ja1NzZmkgPSBmbGFnKHRoaXMsICdsb2NrU3NmaScpO1xuICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCB0cnVlKTtcbiAgICAgIHRoaXMuZXFsKHZhbCk7XG4gICAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHByZXZMb2NrU3NmaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIHZhbCA9PT0gb2JqXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH0nXG4gICAgICAgICwgdmFsXG4gICAgICAgICwgdGhpcy5fb2JqXG4gICAgICAgICwgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcXVhbCcsIGFzc2VydEVxdWFsKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXF1YWxzJywgYXNzZXJ0RXF1YWwpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcScsIGFzc2VydEVxdWFsKTtcblxuICAvKipcbiAgICogIyMjIC5lcWwob2JqWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgb2JqYC4gU2VlIHRoZVxuICAgKiBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGlzIGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWwgdG8ge2E6IDF9XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2E6IDF9KS5idXQubm90LmVxdWFsKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgaXMgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBlcXVhbCB0byBbMSwgMl1cbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmVxbChbMSwgMl0pLmJ1dC5ub3QuZXF1YWwoWzEsIDJdKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5lcWxgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBkZWVwbHkgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXJcbiAgICogdGhhbiBub3QgZGVlcGx5IGVxdWFsIHRvIG9uZSBvZiBjb3VudGxlc3MgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2E6IDF9KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5lcWwoe2I6IDJ9KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuZXFsYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5lcWwoe2I6IDJ9LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uZXFsKHtiOiAyfSk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmVxbHNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuZXFsYC5cbiAgICpcbiAgICogVGhlIGAuZGVlcC5lcXVhbGAgYXNzZXJ0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gYC5lcWxgIGJ1dCB3aXRoIG9uZVxuICAgKiBkaWZmZXJlbmNlOiBgLmRlZXAuZXF1YWxgIGNhdXNlcyBkZWVwIGVxdWFsaXR5IGNvbXBhcmlzb25zIHRvIGFsc28gYmUgdXNlZFxuICAgKiBmb3IgYW55IG90aGVyIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluLlxuICAgKlxuICAgKiBAbmFtZSBlcWxcbiAgICogQGFsaWFzIGVxbHNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRFcWwob2JqLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZXFsID0gZmxhZyh0aGlzLCAnZXFsJyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGVxbChvYmosIGZsYWcodGhpcywgJ29iamVjdCcpKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZGVlcGx5IGVxdWFsICN7ZXhwfSdcbiAgICAgICwgb2JqXG4gICAgICAsIHRoaXMuX29ialxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbCcsIGFzc2VydEVxbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbHMnLCBhc3NlcnRFcWwpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmFib3ZlKG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LlxuICAgKiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYWJvdmUoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmFib3ZlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuYWJvdmUoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmFib3ZlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYWJvdmUoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hYm92ZSgyKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5ndGAgYW5kIGAuZ3JlYXRlclRoYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAuYWJvdmVgLlxuICAgKlxuICAgKiBAbmFtZSBhYm92ZVxuICAgKiBAYWxpYXMgZ3RcbiAgICogQGFsaWFzIGdyZWF0ZXJUaGFuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRBYm92ZSAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChuVHlwZSAhPT0gJ251bWJlcicgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA+IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdhYm92ZScsIGFzc2VydEFib3ZlKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3QnLCBhc3NlcnRBYm92ZSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2dyZWF0ZXJUaGFuJywgYXNzZXJ0QWJvdmUpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmxlYXN0KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlblxuICAgKiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0b1xuICAgKiBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubGVhc3QoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubGVuZ3RoT2ZgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYFxuICAgKiBvciBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYG5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5sZWFzdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmF0LmxlYXN0KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5sZWFzdGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0LmxlYXN0KDIsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYXQubGVhc3QoMik7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAuZ3RlYCBhbmQgYC5ncmVhdGVyVGhhbk9yRXF1YWxgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAubGVhc3RgLlxuICAgKlxuICAgKiBAbmFtZSBsZWFzdFxuICAgKiBAYWxpYXMgZ3RlXG4gICAqIEBhbGlhcyBncmVhdGVyVGhhbk9yRXF1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydExlYXN0IChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBudW1iZXInO1xuICAgIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSAnZGF0ZScgJiYgb2JqVHlwZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgcHJpbnRPYmogPSAob2JqVHlwZSA9PT0gJ3N0cmluZycpID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICdleHBlY3RlZCAnICsgcHJpbnRPYmogKyAnIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgIH1cblxuICAgIGlmIChkb0xlbmd0aCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSAnbGVuZ3RoJ1xuICAgICAgICAsIGl0ZW1zQ291bnQ7XG4gICAgICBpZiAob2JqVHlwZSA9PT0gJ21hcCcgfHwgb2JqVHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9ICdzaXplJztcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBpdGVtc0NvdW50ID49IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGF0IGxlYXN0ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGJlbG93ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqID49IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVhc3QnLCBhc3NlcnRMZWFzdCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2d0ZScsIGFzc2VydExlYXN0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3JlYXRlclRoYW5PckVxdWFsJywgYXNzZXJ0TGVhc3QpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmJlbG93KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgbGVzcyB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LlxuICAgKiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYmVsb3coMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGgoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmJlbG93KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5iZWxvd2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uZXF1YWwoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8ubm90LmJlLmJlbG93KDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5iZWxvd2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmJlbG93KDEsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgyLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYmVsb3coMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAubHRgIGFuZCBgLmxlc3NUaGFuYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLmJlbG93YC5cbiAgICpcbiAgICogQG5hbWUgYmVsb3dcbiAgICogQGFsaWFzIGx0XG4gICAqIEBhbGlhcyBsZXNzVGhhblxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0QmVsb3cgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBuVHlwZSA9IF8udHlwZShuKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGVycm9yTWVzc2FnZVxuICAgICAgLCBzaG91bGRUaHJvdyA9IHRydWU7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgblR5cGUgIT09ICdkYXRlJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPCBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBiZWxvdyAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICAgLCBpdGVtc0NvdW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPCBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2JlbG93JywgYXNzZXJ0QmVsb3cpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsdCcsIGFzc2VydEJlbG93KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVzc1RoYW4nLCBhc3NlcnRCZWxvdyk7XG5cbiAgLyoqXG4gICAqICMjIyAubW9zdChuWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXIgb3IgYSBkYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyXG4gICAqIG9yIGRhdGUgYG5gIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzXG4gICAqIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0Lm1vc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmF0Lm1vc3QoMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYXQubW9zdCg0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5tb3N0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuYmUuYXQubW9zdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAubW9zdGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLmF0Lm1vc3QoMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hdC5tb3N0KDEpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmx0ZWAgYW5kIGAubGVzc1RoYW5PckVxdWFsYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLm1vc3RgLlxuICAgKlxuICAgKiBAbmFtZSBtb3N0XG4gICAqIEBhbGlhcyBsdGVcbiAgICogQGFsaWFzIGxlc3NUaGFuT3JFcXVhbFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TW9zdCAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPD0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA8PSBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbW9zdCcsIGFzc2VydE1vc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsdGUnLCBhc3NlcnRNb3N0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbGVzc1RoYW5PckVxdWFsJywgYXNzZXJ0TW9zdCk7XG5cbiAgLyoqXG4gICAqICMjIyAud2l0aGluKHN0YXJ0LCBmaW5pc2hbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlblxuICAgKiBudW1iZXIgb3IgZGF0ZSBgc3RhcnRgLCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgb3IgZGF0ZSBgZmluaXNoYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS53aXRoaW4oMSwgMyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLndpdGhpbigyLCAzKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUud2l0aGluKDEsIDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubGVuZ3RoT2ZgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYFxuICAgKiBvciBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYHN0YXJ0YCwgYW5kIGxlc3NcbiAgICogdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyIGBmaW5pc2hgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi53aXRoaW4oMiwgNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLndpdGhpbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAud2l0aGluYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoNCkudG8uYmUud2l0aGluKDEsIDMsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCg0LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUud2l0aGluKDEsIDMpO1xuICAgKlxuICAgKiBAbmFtZSB3aXRoaW5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IGxvd2VyIGJvdW5kIGluY2x1c2l2ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gZmluaXNoIHVwcGVyIGJvdW5kIGluY2x1c2l2ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnd2l0aGluJywgZnVuY3Rpb24gKHN0YXJ0LCBmaW5pc2gsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBzdGFydFR5cGUgPSBfLnR5cGUoc3RhcnQpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZmluaXNoVHlwZSA9IF8udHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZVxuICAgICAgLCByYW5nZSA9IChzdGFydFR5cGUgPT09ICdkYXRlJyAmJiBmaW5pc2hUeXBlID09PSAnZGF0ZScpXG4gICAgICAgICAgPyBzdGFydC50b0lTT1N0cmluZygpICsgJy4uJyArIGZpbmlzaC50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBzdGFydCArICcuLicgKyBmaW5pc2g7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgKHN0YXJ0VHlwZSAhPT0gJ2RhdGUnIHx8IGZpbmlzaFR5cGUgIT09ICdkYXRlJykpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBkYXRlcyc7XG4gICAgfSBlbHNlIGlmICgoc3RhcnRUeXBlICE9PSAnbnVtYmVyJyB8fCBmaW5pc2hUeXBlICE9PSAnbnVtYmVyJykgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgbnVtYmVycyc7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPj0gc3RhcnQgJiYgaXRlbXNDb3VudCA8PSBmaW5pc2hcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyB3aXRoaW4gJyArIHJhbmdlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPj0gc3RhcnQgJiYgb2JqIDw9IGZpbmlzaFxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgd2l0aGluICcgKyByYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlb2YoY29uc3RydWN0b3JbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7IH1cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgQ2F0KCkpLnRvLmJlLmFuLmluc3RhbmNlb2YoQ2F0KTtcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluc3RhbmNlb2ZgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBgLmluc3RhbmNlb2ZgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hbi5pbnN0YW5jZW9mKEFycmF5LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgaW4gRVM1LCBgLmluc3RhbmNlb2ZgIG1heSBub3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWRcbiAgICogd2hlbiB1c2luZyBhIHRyYW5zcGlsZXIgc3VjaCBhcyBCYWJlbCBvciBUeXBlU2NyaXB0LiBJbiBwYXJ0aWN1bGFyLCBpdCBtYXlcbiAgICogcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiBzdWJjbGFzc2luZyBidWlsdC1pbiBvYmplY3Qgc3VjaCBhc1xuICAgKiBgQXJyYXlgLCBgRXJyb3JgLCBhbmQgYE1hcGAuIFNlZSB5b3VyIHRyYW5zcGlsZXIncyBkb2NzIGZvciBkZXRhaWxzOlxuICAgKlxuICAgKiAtIChbQmFiZWxdKGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL3VzYWdlL2NhdmVhdHMvI2NsYXNzZXMpKVxuICAgKiAtIChbVHlwZVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmspKVxuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5pbnN0YW5jZU9mYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmluc3RhbmNlb2ZgLlxuICAgKlxuICAgKiBAbmFtZSBpbnN0YW5jZW9mXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAYWxpYXMgaW5zdGFuY2VPZlxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZU9mIChjb25zdHJ1Y3RvciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgdGFyZ2V0ID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICB2YXIgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICB2YXIgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKTtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgaXNJbnN0YW5jZU9mID0gdGFyZ2V0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyAnVGhlIGluc3RhbmNlb2YgYXNzZXJ0aW9uIG5lZWRzIGEgY29uc3RydWN0b3IgYnV0ICdcbiAgICAgICAgICAgICsgXy50eXBlKGNvbnN0cnVjdG9yKSArICcgd2FzIGdpdmVuLicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IF8uZ2V0TmFtZShjb25zdHJ1Y3Rvcik7XG4gICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgIG5hbWUgPSAnYW4gdW5uYW1lZCBjb25zdHJ1Y3Rvcic7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGlzSW5zdGFuY2VPZlxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAnICsgbmFtZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgJyArIG5hbWVcbiAgICApO1xuICB9O1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2luc3RhbmNlb2YnLCBhc3NlcnRJbnN0YW5jZU9mKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5zdGFuY2VPZicsIGFzc2VydEluc3RhbmNlT2YpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5KG5hbWVbLCB2YWxbLCBtc2ddXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnKTtcbiAgICpcbiAgICogV2hlbiBgdmFsYCBpcyBwcm92aWRlZCwgYC5wcm9wZXJ0eWAgYWxzbyBhc3NlcnRzIHRoYXQgdGhlIHByb3BlcnR5J3MgdmFsdWVcbiAgICogaXMgZXF1YWwgdG8gdGhlIGdpdmVuIGB2YWxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYScsIDEpO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eSBpcyB1c2VkLiBBZGQgYC5kZWVwYCBlYXJsaWVyIGluIHRoZVxuICAgKiBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWUgdGhlIGBkZWVwLWVxbGAgcHJvamVjdCBwYWdlIGZvclxuICAgKiBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMgcHJvcGVydHkgYHg6IHthOiAxfWBcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uaGF2ZS5kZWVwLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8ubm90LmhhdmUucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKlxuICAgKiBUaGUgdGFyZ2V0J3MgZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhcmUgYWx3YXlzIGluY2x1ZGVkXG4gICAqIGluIHRoZSBzZWFyY2guIEJ5IGRlZmF1bHQsIGJvdGggb3duIGFuZCBpbmhlcml0ZWQgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQuXG4gICAqIEFkZCBgLm93bmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZXhjbHVkZSBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIHRoZVxuICAgKiBzZWFyY2guXG4gICAqXG4gICAqICAgICBPYmplY3QucHJvdG90eXBlLmIgPSAyO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd24ucHJvcGVydHkoJ2EnKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duLnByb3BlcnR5KCdhJywgMSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogYC5kZWVwYCBhbmQgYC5vd25gIGNhbiBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7eDoge2E6IDF9fSkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIEFkZCBgLm5lc3RlZGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZW5hYmxlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gd2hlblxuICAgKiByZWZlcmVuY2luZyBuZXN0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ2EuYlsxXScpO1xuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzFdJywgJ3knKTtcbiAgICpcbiAgICogSWYgYC5gIG9yIGBbXWAgYXJlIHBhcnQgb2YgYW4gYWN0dWFsIHByb3BlcnR5IG5hbWUsIHRoZXkgY2FuIGJlIGVzY2FwZWQgYnlcbiAgICogYWRkaW5nIHR3byBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlbS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7Jy5hJzogeydbYl0nOiAneCd9fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ1xcXFwuYS5cXFxcW2JcXFxcXScpO1xuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm5lc3RlZGAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogW3tjOiAzfV19fSlcbiAgICogICAgICAgLnRvLmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkoJ2EuYlswXScsIHtjOiAzfSk7XG4gICAqXG4gICAqIGAub3duYCBhbmQgYC5uZXN0ZWRgIGNhbm5vdCBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5wcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5wcm9wZXJ0eWAgd2hlbiBwcm92aWRpbmcgYHZhbGAuIFRoZVxuICAgKiBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIGtleSBgbmFtZWAsIG9yIHRoYXQgaXRcbiAgICogZG9lcyBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCBidXQgaXRzIHZhbHVlIGlzbid0IGVxdWFsIHRvXG4gICAqIHRoZSBnaXZlbiBgdmFsYC4gSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzXG4gICAqIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpc24ndCBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5XG4gICAqIGBuYW1lYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHtiOiAyfSkudG8ubm90LmhhdmUucHJvcGVydHkoJ2EnLCAxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCxcbiAgICogaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSBwcm9wZXJ0eSBoYXMgaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXJcbiAgICogdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDN9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDN9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScsIDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5wcm9wZXJ0eWAgY2hhbmdlcyB0aGUgdGFyZ2V0IG9mIGFueSBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpblxuICAgKiB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlIG9yaWdpbmFsIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJykudGhhdC5pcy5hKCdudW1iZXInKTtcbiAgICpcbiAgICogYC5wcm9wZXJ0eWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgYHZhbGAsIG9ubHkgdXNlIHRoZVxuICAgKiBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAyKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2InLCB1bmRlZmluZWQsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogVGhlIGFib3ZlIGFzc2VydGlvbiBpc24ndCB0aGUgc2FtZSB0aGluZyBhcyBub3QgcHJvdmlkaW5nIGB2YWxgLiBJbnN0ZWFkLFxuICAgKiBpdCdzIGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQgb2JqZWN0IGhhcyBhIGBiYCBwcm9wZXJ0eSB0aGF0J3MgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqIFRoZSBhc3NlcnRpb25zIGAub3duUHJvcGVydHlgIGFuZCBgLmhhdmVPd25Qcm9wZXJ0eWAgY2FuIGJlIHVzZWRcbiAgICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5vd24ucHJvcGVydHlgLlxuICAgKlxuICAgKiBAbmFtZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWwgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQHJldHVybnMgdmFsdWUgb2YgcHJvcGVydHkgZm9yIGNoYWluaW5nXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydFByb3BlcnR5IChuYW1lLCB2YWwsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuXG4gICAgdmFyIGlzTmVzdGVkID0gZmxhZyh0aGlzLCAnbmVzdGVkJylcbiAgICAgICwgaXNPd24gPSBmbGFnKHRoaXMsICdvd24nKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcblxuICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcblxuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgaWYgKG5hbWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIG5lc3RlZCBzeW50YXgnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuYW1lVHlwZSAhPT0gJ3N0cmluZycgJiYgbmFtZVR5cGUgIT09ICdudW1iZXInICYmIG5hbWVUeXBlICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2wnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTmVzdGVkICYmIGlzT3duKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyAnVGhlIFwibmVzdGVkXCIgYW5kIFwib3duXCIgZmxhZ3MgY2Fubm90IGJlIGNvbWJpbmVkLicsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyAnVGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBuZWdhdGUgPSBmbGFnKHRoaXMsICduZWdhdGUnKVxuICAgICAgLCBwYXRoSW5mbyA9IGlzTmVzdGVkID8gXy5nZXRQYXRoSW5mbyhvYmosIG5hbWUpIDogbnVsbFxuICAgICAgLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV1cbiAgICAgICwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnKHRoaXMsICdlcWwnKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyOztcblxuICAgIHZhciBkZXNjcmlwdG9yID0gJyc7XG4gICAgaWYgKGlzRGVlcCkgZGVzY3JpcHRvciArPSAnZGVlcCAnO1xuICAgIGlmIChpc093bikgZGVzY3JpcHRvciArPSAnb3duICc7XG4gICAgaWYgKGlzTmVzdGVkKSBkZXNjcmlwdG9yICs9ICduZXN0ZWQgJztcbiAgICBkZXNjcmlwdG9yICs9ICdwcm9wZXJ0eSAnO1xuXG4gICAgdmFyIGhhc1Byb3BlcnR5O1xuICAgIGlmIChpc093bikgaGFzUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgICBlbHNlIGlmIChpc05lc3RlZCkgaGFzUHJvcGVydHkgPSBwYXRoSW5mby5leGlzdHM7XG4gICAgZWxzZSBoYXNQcm9wZXJ0eSA9IF8uaGFzUHJvcGVydHkob2JqLCBuYW1lKTtcblxuICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIG5lZ2F0ZWQgYXNzZXJ0aW9uIGZvciBib3RoIG5hbWUgYW5kIHZhbCwgbWVyZWx5IGhhdmluZ1xuICAgIC8vIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc24ndCBlbm91Z2ggdG8gY2F1c2UgdGhlIGFzc2VydGlvbiB0b1xuICAgIC8vIGZhaWwuIEl0IG11c3QgYm90aCBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoYXQgcHJvcGVydHkgbXVzdCBlcXVhbCB0aGUgZ2l2ZW4gdmFsLiBUaGVyZWZvcmUsIHNraXAgdGhpcyBhc3NlcnRpb24gaW5cbiAgICAvLyBmYXZvciBvZiB0aGUgbmV4dC5cbiAgICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eSAmJiBpc0VxbCh2YWwsIHZhbHVlKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7YWN0fSdcbiAgICAgICAgLCB2YWxcbiAgICAgICAgLCB2YWx1ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCB2YWx1ZSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdwcm9wZXJ0eScsIGFzc2VydFByb3BlcnR5KTtcblxuICBmdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eSAobmFtZSwgdmFsdWUsIG1zZykge1xuICAgIGZsYWcodGhpcywgJ293bicsIHRydWUpO1xuICAgIGFzc2VydFByb3BlcnR5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvd25Qcm9wZXJ0eScsIGFzc2VydE93blByb3BlcnR5KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaGF2ZU93blByb3BlcnR5JywgYXNzZXJ0T3duUHJvcGVydHkpO1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5RGVzY3JpcHRvcihuYW1lWywgZGVzY3JpcHRvclssIG1zZ11dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgaXRzIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGtleVxuICAgKiBgbmFtZWAuIEVudW1lcmFibGUgYW5kIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIGluIHRoZVxuICAgKiBzZWFyY2guXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiBXaGVuIGBkZXNjcmlwdG9yYCBpcyBwcm92aWRlZCwgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGFsc28gYXNzZXJ0cyB0aGF0XG4gICAqIHRoZSBwcm9wZXJ0eSdzIGRlc2NyaXB0b3IgaXMgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgZGVzY3JpcHRvcmAuIFNlZVxuICAgKiB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub3duUHJvcGVydHlEZXNjcmlwdG9yYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIHdoZW4gcHJvdmlkaW5nXG4gICAqIGEgYGRlc2NyaXB0b3JgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieVxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0IGVpdGhlciBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGhcbiAgICogdGhlIGdpdmVuIGtleSBgbmFtZWAsIG9yIHRoYXQgaXQgZG9lcyBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgKiBnaXZlbiBrZXkgYG5hbWVgIGJ1dCBpdFx1MjAxOXMgbm90IGRlZXBseSBlcXVhbCB0byB0aGUgZ2l2ZW4gYGRlc2NyaXB0b3JgLiBJdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuXG4gICAqIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuXG4gICAqIGtleSBgbmFtZWAsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlblxuICAgKiBrZXkgYG5hbWVgLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHByb3BlcnR5IGhhcyBpdHMgZXhwZWN0ZWRcbiAgICogZGVzY3JpcHRvciwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIG9uZSBvZiBtYW55XG4gICAqIHVuZXhwZWN0ZWQgZGVzY3JpcHRvcnMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAzfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAzLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDEsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGNoYW5nZXMgdGhlIHRhcmdldCBvZiBhbnkgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvd1xuICAgKiBpbiB0aGUgY2hhaW4gdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZyb20gdGhlIG9yaWdpbmFsXG4gICAqIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpXG4gICAqICAgICAgIC50aGF0Lmhhcy5wcm9wZXJ0eSgnZW51bWVyYWJsZScsIHRydWUpO1xuICAgKlxuICAgKiBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhXG4gICAqIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzb1xuICAgKiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmdcbiAgICogYGRlc2NyaXB0b3JgLCBvbmx5IHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAyLFxuICAgKiAgICAgfSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDIsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSlcbiAgICogICAgICAgLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdiJywgdW5kZWZpbmVkLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqIFRoZSBhYm92ZSBhc3NlcnRpb24gaXNuJ3QgdGhlIHNhbWUgdGhpbmcgYXMgbm90IHByb3ZpZGluZyBgZGVzY3JpcHRvcmAuXG4gICAqIEluc3RlYWQsIGl0J3MgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBvYmplY3QgaGFzIGEgYGJgIHByb3BlcnR5XG4gICAqIGRlc2NyaXB0b3IgdGhhdCdzIGRlZXBseSBlcXVhbCB0byBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhlIGFsaWFzIGAuaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvcmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgLlxuICAgKlxuICAgKiBAbmFtZSBvd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQGFsaWFzIGhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yIChuYW1lLCBkZXNjcmlwdG9yLCBtc2cpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgICAgZGVzY3JpcHRvciA9IG51bGw7XG4gICAgfVxuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB2YXIgYWN0dWFsRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0KG9iaiksIG5hbWUpO1xuICAgIHZhciBlcWwgPSBmbGFnKHRoaXMsICdlcWwnKTtcbiAgICBpZiAoYWN0dWFsRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBlcWwoZGVzY3JpcHRvciwgYWN0dWFsRGVzY3JpcHRvcilcbiAgICAgICAgLCAnZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpICsgJyBvbiAje3RoaXN9IHRvIG1hdGNoICcgKyBfLmluc3BlY3QoZGVzY3JpcHRvcikgKyAnLCBnb3QgJyArIF8uaW5zcGVjdChhY3R1YWxEZXNjcmlwdG9yKVxuICAgICAgICAsICdleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9uICN7dGhpc30gdG8gbm90IG1hdGNoICcgKyBfLmluc3BlY3QoZGVzY3JpcHRvcilcbiAgICAgICAgLCBkZXNjcmlwdG9yXG4gICAgICAgICwgYWN0dWFsRGVzY3JpcHRvclxuICAgICAgICAsIHRydWVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGFjdHVhbERlc2NyaXB0b3JcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbERlc2NyaXB0b3IpO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnb3duUHJvcGVydHlEZXNjcmlwdG9yJywgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvcicsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5cbiAgLyoqXG4gICAqICMjIyAubGVuZ3RoT2YoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgb3IgYHNpemVgIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXJcbiAgICogYG5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFsxLCAyLCAzXSkpLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqICAgICBleHBlY3QobmV3IE1hcChbWydhJywgMV0sIFsnYicsIDJdLCBbJ2MnLCAzXV0pKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmxlbmd0aE9mYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBwcm9wZXJ0eSBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWRcbiAgICogdmFsdWUsIHJhdGhlciB0aGFuIG5vdCBlcXVhbCB0byBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmhhdmUubGVuZ3RoT2YoNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmxlbmd0aE9mYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDIsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLmxlbmd0aE9mKDIpO1xuICAgKlxuICAgKiBgLmxlbmd0aE9mYCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgbGFuZ3VhZ2UgY2hhaW4sIGNhdXNpbmcgYWxsIGAuYWJvdmVgLFxuICAgKiBgLmJlbG93YCwgYC5sZWFzdGAsIGAubW9zdGAsIGFuZCBgLndpdGhpbmAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGVcbiAgICogY2hhaW4gdG8gdXNlIHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBwcm9wZXJ0eSBhcyB0aGUgdGFyZ2V0LiBIb3dldmVyLCBpdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgIHByb3BlcnR5IGlzIGVxdWFsIHRvIGl0c1xuICAgKiBleHBlY3RlZCBsZW5ndGgsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0cyBgbGVuZ3RoYCBwcm9wZXJ0eSBmYWxsc1xuICAgKiB3aXRoaW4gc29tZSByYW5nZSBvZiB2YWx1ZXMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0LmxlYXN0KDMpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDMpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi53aXRoaW4oMiw0KTtcbiAgICpcbiAgICogRHVlIHRvIGEgY29tcGF0aWJpbGl0eSBpc3N1ZSwgdGhlIGFsaWFzIGAubGVuZ3RoYCBjYW4ndCBiZSBjaGFpbmVkIGRpcmVjdGx5XG4gICAqIG9mZiBvZiBhbiB1bmludm9rZWQgbWV0aG9kIHN1Y2ggYXMgYC5hYC4gVGhlcmVmb3JlLCBgLmxlbmd0aGAgY2FuJ3QgYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmxlbmd0aE9mYCBpbiBldmVyeSBzaXR1YXRpb24uIEl0J3MgcmVjb21tZW5kZWQgdG9cbiAgICogYWx3YXlzIHVzZSBgLmxlbmd0aE9mYCBpbnN0ZWFkIG9mIGAubGVuZ3RoYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUuYS5sZW5ndGgoMyk7IC8vIGluY29tcGF0aWJsZTsgdGhyb3dzIGVycm9yXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmEubGVuZ3RoT2YoMyk7ICAvLyBwYXNzZXMgYXMgZXhwZWN0ZWRcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQGFsaWFzIGxlbmd0aFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoQ2hhaW4gKCkge1xuICAgIGZsYWcodGhpcywgJ2RvTGVuZ3RoJywgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRMZW5ndGggKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAsIGl0ZW1zQ291bnQ7XG5cbiAgICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICBjYXNlICdzZXQnOlxuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXRlbXNDb3VudCA9PSBuXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBvZiAje2FjdH0nXG4gICAgICAsIG5cbiAgICAgICwgaXRlbXNDb3VudFxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnbGVuZ3RoT2YnLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcblxuICAvKipcbiAgICogIyMjIC5tYXRjaChyZVssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IG1hdGNoZXMgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBgcmVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5tYXRjaCgvXmZvby8pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm1hdGNoYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubm90Lm1hdGNoKC90YWNvLyk7XG4gICAqXG4gICAqIGAubWF0Y2hgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubWF0Y2goL3RhY28vLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicsICdub29vIHdoeSBmYWlsPz8nKS50by5tYXRjaCgvdGFjby8pO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5tYXRjaGVzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLm1hdGNoYC5cbiAgICpcbiAgICogQG5hbWUgbWF0Y2hcbiAgICogQGFsaWFzIG1hdGNoZXNcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cbiAgZnVuY3Rpb24gYXNzZXJ0TWF0Y2gocmUsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgcmUuZXhlYyhvYmopXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoICcgKyByZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gbWF0Y2ggJyArIHJlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ21hdGNoJywgYXNzZXJ0TWF0Y2gpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtYXRjaGVzJywgYXNzZXJ0TWF0Y2gpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnN0cmluZyhzdHJbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBzdHJpbmcgY29udGFpbnMgdGhlIGdpdmVuIHN1YnN0cmluZyBgc3RyYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8uaGF2ZS5zdHJpbmcoJ2JhcicpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnN0cmluZ2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLm5vdC5oYXZlLnN0cmluZygndGFjbycpO1xuICAgKlxuICAgKiBgLnN0cmluZ2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5oYXZlLnN0cmluZygndGFjbycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUuc3RyaW5nKCd0YWNvJyk7XG4gICAqXG4gICAqIEBuYW1lIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzdHJpbmcnLCBmdW5jdGlvbiAoc3RyLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdzdHJpbmcnKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB+b2JqLmluZGV4T2Yoc3RyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluICcgKyBfLmluc3BlY3Qoc3RyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiAnICsgXy5pbnNwZWN0KHN0cilcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5rZXlzKGtleTFbLCBrZXkyWywgLi4uXV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IG9iamVjdCwgYXJyYXksIG1hcCwgb3Igc2V0IGhhcyB0aGUgZ2l2ZW4ga2V5cy4gT25seVxuICAgKiB0aGUgdGFyZ2V0J3Mgb3duIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoLlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYW4gb2JqZWN0IG9yIGFycmF5LCBrZXlzIGNhbiBiZSBwcm92aWRlZCBhcyBvbmUgb3IgbW9yZVxuICAgKiBzdHJpbmcgYXJndW1lbnRzLCBhIHNpbmdsZSBhcnJheSBhcmd1bWVudCwgb3IgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBJblxuICAgKiB0aGUgbGF0dGVyIGNhc2UsIG9ubHkgdGhlIGtleXMgaW4gdGhlIGdpdmVuIG9iamVjdCBtYXR0ZXI7IHRoZSB2YWx1ZXMgYXJlXG4gICAqIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdChbJ3gnLCAneSddKS50by5oYXZlLmFsbC5rZXlzKDAsIDEpO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cyhbJ2EnLCAnYiddKTtcbiAgICogICAgIGV4cGVjdChbJ3gnLCAneSddKS50by5oYXZlLmFsbC5rZXlzKFswLCAxXSk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKHthOiA0LCBiOiA1fSk7IC8vIGlnbm9yZSA0IGFuZCA1XG4gICAqICAgICBleHBlY3QoWyd4JywgJ3knXSkudG8uaGF2ZS5hbGwua2V5cyh7MDogNCwgMTogNX0pOyAvLyBpZ25vcmUgNCBhbmQgNVxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBtYXAgb3Igc2V0LCBlYWNoIGtleSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgc2VwYXJhdGVcbiAgICogYXJndW1lbnQuXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IE1hcChbWydhJywgMV0sIFsnYicsIDJdXSkpLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWydhJywgJ2InXSkpLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBCZWNhdXNlIGAua2V5c2AgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLCBpdCdzXG4gICAqIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgdXNpbmcgYC5rZXlzYC4gU2VlIHRoZSBgLmFgIGRvY1xuICAgKiBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmJlLmFuKCdvYmplY3QnKS50aGF0Lmhhcy5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBrZXlzIG9mIG1hcHMgYW5kXG4gICAqIHNldHMuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZVxuICAgKiB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IHNldCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBrZXkgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8uaGF2ZS5hbGwuZGVlcC5rZXlzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8ubm90LmhhdmUuYWxsLmtleXMoW3thOiAxfV0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG11c3QgaGF2ZSBhbGwgb2YgdGhlIGdpdmVuIGtleXMgYW5kIG5vIG1vcmUuIEFkZFxuICAgKiBgLmFueWAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gb25seSByZXF1aXJlIHRoYXQgdGhlIHRhcmdldCBoYXZlIGF0IGxlYXN0XG4gICAqIG9uZSBvZiB0aGUgZ2l2ZW4ga2V5cy4gQWxzbywgYWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGVcbiAgICogYC5rZXlzYC4gSXQncyBvZnRlbiBiZXN0IHRvIGFkZCBgLmFueWAgd2hlbiBuZWdhdGluZyBgLmtleXNgLCBhbmQgdG8gdXNlXG4gICAqIGAuYWxsYCB3aGVuIGFzc2VydGluZyBgLmtleXNgIHdpdGhvdXQgbmVnYXRpb24uXG4gICAqXG4gICAqIFdoZW4gbmVnYXRpbmcgYC5rZXlzYCwgYC5hbnlgIGlzIHByZWZlcnJlZCBiZWNhdXNlIGAubm90LmFueS5rZXlzYCBhc3NlcnRzXG4gICAqIGV4YWN0bHkgd2hhdCdzIGV4cGVjdGVkIG9mIHRoZSBvdXRwdXQsIHdoZXJlYXMgYC5ub3QuYWxsLmtleXNgIGNyZWF0ZXNcbiAgICogdW5jZXJ0YWluIGV4cGVjdGF0aW9ucy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbnkgb2YgdGhlIGdpdmVuIGtleXNcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZDsgYXNzZXJ0cyB0aGF0IHRhcmdldCBkb2Vzbid0IGhhdmUgYWxsIG9mIHRoZSBnaXZlblxuICAgKiAgICAgLy8ga2V5cyBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBzb21lIG9mIHRoZW1cbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLm5vdC5oYXZlLmFsbC5rZXlzKCdjJywgJ2QnKTtcbiAgICpcbiAgICogV2hlbiBhc3NlcnRpbmcgYC5rZXlzYCB3aXRob3V0IG5lZ2F0aW9uLCBgLmFsbGAgaXMgcHJlZmVycmVkIGJlY2F1c2VcbiAgICogYC5hbGwua2V5c2AgYXNzZXJ0cyBleGFjdGx5IHdoYXQncyBleHBlY3RlZCBvZiB0aGUgb3V0cHV0LCB3aGVyZWFzXG4gICAqIGAuYW55LmtleXNgIGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGhhcyBhbGwgdGhlIGdpdmVuIGtleXNcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuXG4gICAqICAgICAvLyBrZXlzIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIG1vcmUgb2YgdGhlbVxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBgLmFsbGAgaXMgdXNlZCBieSBkZWZhdWx0IHdoZW4gbmVpdGhlciBgLmFsbGAgbm9yIGAuYW55YCBhcHBlYXJcbiAgICogZWFybGllciBpbiB0aGUgY2hhaW4uIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhZGQgYC5hbGxgIGFueXdheSBiZWNhdXNlXG4gICAqIGl0IGltcHJvdmVzIHJlYWRhYmlsaXR5LlxuICAgKlxuICAgKiAgICAgLy8gQm90aCBhc3NlcnRpb25zIGFyZSBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5rZXlzKCdhJywgJ2InKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmluY2x1ZGVgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdCB0aGUgdGFyZ2V0J3Mga2V5cyBiZSBhXG4gICAqIHN1cGVyc2V0IG9mIHRoZSBleHBlY3RlZCBrZXlzLCByYXRoZXIgdGhhbiBpZGVudGljYWwgc2V0cy5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QncyBrZXlzIGFyZSBhIHN1cGVyc2V0IG9mIFsnYScsICdiJ10gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8ubm90LmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpZiBgLmFueWAgYW5kIGAuaW5jbHVkZWAgYXJlIGNvbWJpbmVkLCBvbmx5IHRoZSBgLmFueWAgdGFrZXNcbiAgICogZWZmZWN0LiBUaGUgYC5pbmNsdWRlYCBpcyBpZ25vcmVkIGluIHRoaXMgY2FzZS5cbiAgICpcbiAgICogICAgIC8vIEJvdGggYXNzZXJ0aW9ucyBhcmUgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmluY2x1ZGUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUua2V5KCdiJyk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmtleWAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5rZXlzYC5cbiAgICpcbiAgICogQG5hbWUga2V5c1xuICAgKiBAYWxpYXMga2V5XG4gICAqIEBwYXJhbSB7Li4uU3RyaW5nfEFycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRLZXlzIChrZXlzKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKVxuICAgICAgLCBrZXlzVHlwZSA9IF8udHlwZShrZXlzKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBzdHJcbiAgICAgICwgZGVlcFN0ciA9ICcnXG4gICAgICAsIGFjdHVhbFxuICAgICAgLCBvayA9IHRydWVcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKTtcblxuICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcbiAgICB2YXIgbWl4ZWRBcmdzTXNnID0gZmxhZ01zZyArICd3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50cyc7XG5cbiAgICBpZiAob2JqVHlwZSA9PT0gJ01hcCcgfHwgb2JqVHlwZSA9PT0gJ1NldCcpIHtcbiAgICAgIGRlZXBTdHIgPSBpc0RlZXAgPyAnZGVlcGx5ICcgOiAnJztcbiAgICAgIGFjdHVhbCA9IFtdO1xuXG4gICAgICAvLyBNYXAgYW5kIFNldCAnLmtleXMnIGFyZW4ndCBzdXBwb3J0ZWQgaW4gSUUgMTEuIFRoZXJlZm9yZSwgdXNlIC5mb3JFYWNoLlxuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKHZhbCwga2V5KSB7IGFjdHVhbC5wdXNoKGtleSkgfSk7XG5cbiAgICAgIGlmIChrZXlzVHlwZSAhPT0gJ0FycmF5Jykge1xuICAgICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsID0gXy5nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopO1xuXG4gICAgICBzd2l0Y2ggKGtleXNUeXBlKSB7XG4gICAgICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdPYmplY3QnOlxuICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHN0cmluZ2lmeSBub24tU3ltYm9scyBiZWNhdXNlIFN5bWJvbHMgd291bGQgYmVjb21lIFwiU3ltYm9sKClcIlxuICAgICAga2V5cyA9IGtleXMubWFwKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzeW1ib2wnID8gdmFsIDogU3RyaW5nKHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArICdrZXlzIHJlcXVpcmVkJywgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICB2YXIgbGVuID0ga2V5cy5sZW5ndGhcbiAgICAgICwgYW55ID0gZmxhZyh0aGlzLCAnYW55JylcbiAgICAgICwgYWxsID0gZmxhZyh0aGlzLCAnYWxsJylcbiAgICAgICwgZXhwZWN0ZWQgPSBrZXlzXG4gICAgICAsIGlzRXFsID0gaXNEZWVwID8gZmxhZyh0aGlzLCAnZXFsJykgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcblxuICAgIGlmICghYW55ICYmICFhbGwpIHtcbiAgICAgIGFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSGFzIGFueVxuICAgIGlmIChhbnkpIHtcbiAgICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGV4cGVjdGVkS2V5LCBhY3R1YWxLZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhcyBhbGxcbiAgICBpZiAoYWxsKSB7XG4gICAgICBvayA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICAgIHJldHVybiBhY3R1YWwuc29tZShmdW5jdGlvbihhY3R1YWxLZXkpIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZmxhZyh0aGlzLCAnY29udGFpbnMnKSkge1xuICAgICAgICBvayA9IG9rICYmIGtleXMubGVuZ3RoID09IGFjdHVhbC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gS2V5IHN0cmluZ1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBfLmluc3BlY3Qoa2V5KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGxhc3QgPSBrZXlzLnBvcCgpO1xuICAgICAgaWYgKGFsbCkge1xuICAgICAgICBzdHIgPSBrZXlzLmpvaW4oJywgJykgKyAnLCBhbmQgJyArIGxhc3Q7XG4gICAgICB9XG4gICAgICBpZiAoYW55KSB7XG4gICAgICAgIHN0ciA9IGtleXMuam9pbignLCAnKSArICcsIG9yICcgKyBsYXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBfLmluc3BlY3Qoa2V5c1swXSk7XG4gICAgfVxuXG4gICAgLy8gRm9ybVxuICAgIHN0ciA9IChsZW4gPiAxID8gJ2tleXMgJyA6ICdrZXkgJykgKyBzdHI7XG5cbiAgICAvLyBIYXZlIC8gaW5jbHVkZVxuICAgIHN0ciA9IChmbGFnKHRoaXMsICdjb250YWlucycpID8gJ2NvbnRhaW4gJyA6ICdoYXZlICcpICsgc3RyO1xuXG4gICAgLy8gQXNzZXJ0aW9uXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG9rXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvICcgKyBkZWVwU3RyICsgc3RyXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCAnICsgZGVlcFN0ciArIHN0clxuICAgICAgLCBleHBlY3RlZC5zbGljZSgwKS5zb3J0KF8uY29tcGFyZUJ5SW5zcGVjdClcbiAgICAgICwgYWN0dWFsLnNvcnQoXy5jb21wYXJlQnlJbnNwZWN0KVxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2tleXMnLCBhc3NlcnRLZXlzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgna2V5JywgYXNzZXJ0S2V5cyk7XG5cbiAgLyoqXG4gICAqICMjIyAudGhyb3coW2Vycm9yTGlrZV0sIFtlcnJNc2dNYXRjaGVyXSwgW21zZ10pXG4gICAqXG4gICAqIFdoZW4gbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYC50aHJvd2AgaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZFxuICAgKiBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coKTtcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGFuZCBpdCdzIGFuIGVycm9yIGNvbnN0cnVjdG9yLCBgLnRocm93YFxuICAgKiBpbnZva2VzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gdGhhdCdzIGFuXG4gICAqIGluc3RhbmNlIG9mIHRoYXQgZXJyb3IgY29uc3RydWN0b3IuXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYW5kIGl0J3MgYW4gZXJyb3IgaW5zdGFuY2UsIGAudGhyb3dgIGludm9rZXNcbiAgICogdGhlIHRhcmdldCBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB0aGF0J3Mgc3RyaWN0bHlcbiAgICogKGA9PT1gKSBlcXVhbCB0byB0aGF0IGVycm9yIGluc3RhbmNlLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpO1xuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KGVycik7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhIHN0cmluZywgYC50aHJvd2AgaW52b2tlcyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHdpdGggYSBtZXNzYWdlIHRoYXRcbiAgICogY29udGFpbnMgdGhhdCBzdHJpbmcuXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdygnc2FsbW9uJyk7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYC50aHJvd2BcbiAgICogaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHdpdGggYVxuICAgKiBtZXNzYWdlIHRoYXQgbWF0Y2hlcyB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KC9zYWxtb24vKTtcbiAgICpcbiAgICogV2hlbiB0d28gYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYW5kIHRoZSBmaXJzdCBpcyBhbiBlcnJvciBpbnN0YW5jZSBvclxuICAgKiBjb25zdHJ1Y3RvciwgYW5kIHRoZSBzZWNvbmQgaXMgYSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uLCBgLnRocm93YFxuICAgKiBpbnZva2VzIHRoZSBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB0aGF0IGZ1bGZpbGxzIGJvdGhcbiAgICogY29uZGl0aW9ucyBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAqXG4gICAqICAgICB2YXIgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7XG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yLCAnc2FsbW9uJyk7XG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvciwgL3NhbG1vbi8pO1xuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhlcnIsICdzYWxtb24nKTtcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coZXJyLCAvc2FsbW9uLyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAudGhyb3dgLlxuICAgKlxuICAgKiAgICAgdmFyIGdvb2RGbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8ubm90LnRocm93KCk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLnRocm93YCB3aGVuIHByb3ZpZGluZyBhbnkgYXJndW1lbnRzLlxuICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGVpdGhlciBkb2Vzbid0IHRocm93IGFuIGVycm9yLCBvciB0aGF0IGl0IHRocm93cyBhbiBlcnJvciBidXQgb2YgYVxuICAgKiBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBnaXZlbiB0eXBlLCBvciB0aGF0IGl0IHRocm93cyBhbiBlcnJvciBvZiB0aGUgZ2l2ZW5cbiAgICogdHlwZSBidXQgd2l0aCBhIG1lc3NhZ2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgdGhlIGdpdmVuIHN0cmluZy4gSXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhblxuICAgKiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpc24ndCBleHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgZ29vZEZuID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoZ29vZEZuKS50by5ub3QudGhyb3coKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLm5vdC50aHJvdyhSZWZlcmVuY2VFcnJvciwgJ3gnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiB0aGF0IHRoZSBlcnJvciBpcyBvZiBpdHMgZXhwZWN0ZWQgdHlwZSwgYW5kIGhhcyBhIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcyBhblxuICAgKiBleHBlY3RlZCBzdHJpbmcsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueVxuICAgKiB1bmV4cGVjdGVkIHR5cGVzLCBhbmQgZG9lc24ndCBoYXZlIGEgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIHNvbWUgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yLCAnc2FsbW9uJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLm5vdC50aHJvdyhSZWZlcmVuY2VFcnJvciwgJ3gnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAudGhyb3dgIGNoYW5nZXMgdGhlIHRhcmdldCBvZiBhbnkgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG9cbiAgICogYmUgdGhlIGVycm9yIG9iamVjdCB0aGF0J3MgdGhyb3duLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpO1xuICAgKiAgICAgZXJyLmNvZGUgPSA0MjtcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IpLndpdGgucHJvcGVydHkoJ2NvZGUnLCA0Mik7XG4gICAqXG4gICAqIGAudGhyb3dgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC4gV2hlbiBub3QgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIGFsd2F5cyB1c2VcbiAgICogdGhlIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgdmFyIGdvb2RGbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8udGhyb3coVHlwZUVycm9yLCAneCcsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChnb29kRm4sICdub29vIHdoeSBmYWlsPz8nKS50by50aHJvdygpO1xuICAgKlxuICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgaW4gRVM1LCBgLnRocm93YCBtYXkgbm90IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkIHdoZW5cbiAgICogdXNpbmcgYSB0cmFuc3BpbGVyIHN1Y2ggYXMgQmFiZWwgb3IgVHlwZVNjcmlwdC4gSW4gcGFydGljdWxhciwgaXQgbWF5XG4gICAqIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIHdoZW4gc3ViY2xhc3NpbmcgdGhlIGJ1aWx0LWluIGBFcnJvcmAgb2JqZWN0IGFuZFxuICAgKiB0aGVuIHBhc3NpbmcgdGhlIHN1YmNsYXNzZWQgY29uc3RydWN0b3IgdG8gYC50aHJvd2AuIFNlZSB5b3VyIHRyYW5zcGlsZXInc1xuICAgKiBkb2NzIGZvciBkZXRhaWxzOlxuICAgKlxuICAgKiAtIChbQmFiZWxdKGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL3VzYWdlL2NhdmVhdHMvI2NsYXNzZXMpKVxuICAgKiAtIChbVHlwZVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmspKVxuICAgKlxuICAgKiBCZXdhcmUgb2Ygc29tZSBjb21tb24gbWlzdGFrZXMgd2hlbiB1c2luZyB0aGUgYHRocm93YCBhc3NlcnRpb24uIE9uZSBjb21tb25cbiAgICogbWlzdGFrZSBpcyB0byBhY2NpZGVudGFsbHkgaW52b2tlIHRoZSBmdW5jdGlvbiB5b3Vyc2VsZiBpbnN0ZWFkIG9mIGxldHRpbmdcbiAgICogdGhlIGB0aHJvd2AgYXNzZXJ0aW9uIGludm9rZSB0aGUgZnVuY3Rpb24gZm9yIHlvdS4gRm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdGVzdGluZyBpZiBhIGZ1bmN0aW9uIG5hbWVkIGBmbmAgdGhyb3dzLCBwcm92aWRlIGBmbmAgaW5zdGVhZCBvZiBgZm4oKWAgYXNcbiAgICogdGhlIHRhcmdldCBmb3IgdGhlIGFzc2VydGlvbi5cbiAgICpcbiAgICogICAgIGV4cGVjdChmbikudG8udGhyb3coKTsgICAgIC8vIEdvb2QhIFRlc3RzIGBmbmAgYXMgZGVzaXJlZFxuICAgKiAgICAgZXhwZWN0KGZuKCkpLnRvLnRocm93KCk7ICAgLy8gQmFkISBUZXN0cyByZXN1bHQgb2YgYGZuKClgLCBub3QgYGZuYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0byBhc3NlcnQgdGhhdCB5b3VyIGZ1bmN0aW9uIGBmbmAgdGhyb3dzIHdoZW4gcGFzc2VkIGNlcnRhaW5cbiAgICogYXJndW1lbnRzLCB0aGVuIHdyYXAgYSBjYWxsIHRvIGBmbmAgaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBleHBlY3QoZnVuY3Rpb24gKCkgeyBmbig0Mik7IH0pLnRvLnRocm93KCk7ICAvLyBGdW5jdGlvbiBleHByZXNzaW9uXG4gICAqICAgICBleHBlY3QoKCkgPT4gZm4oNDIpKS50by50aHJvdygpOyAgICAgICAgICAgICAvLyBFUzYgYXJyb3cgZnVuY3Rpb25cbiAgICpcbiAgICogQW5vdGhlciBjb21tb24gbWlzdGFrZSBpcyB0byBwcm92aWRlIGFuIG9iamVjdCBtZXRob2QgKG9yIGFueSBzdGFuZC1hbG9uZVxuICAgKiBmdW5jdGlvbiB0aGF0IHJlbGllcyBvbiBgdGhpc2ApIGFzIHRoZSB0YXJnZXQgb2YgdGhlIGFzc2VydGlvbi4gRG9pbmcgc28gaXNcbiAgICogcHJvYmxlbWF0aWMgYmVjYXVzZSB0aGUgYHRoaXNgIGNvbnRleHQgd2lsbCBiZSBsb3N0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGludm9rZWQgYnkgYC50aHJvd2A7IHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBrbm93IHdoYXQgYHRoaXNgIGlzIHN1cHBvc2VkXG4gICAqIHRvIGJlLiBUaGVyZSBhcmUgdHdvIHdheXMgYXJvdW5kIHRoaXMgcHJvYmxlbS4gT25lIHNvbHV0aW9uIGlzIHRvIHdyYXAgdGhlXG4gICAqIG1ldGhvZCBvciBmdW5jdGlvbiBjYWxsIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uLiBBbm90aGVyIHNvbHV0aW9uIGlzIHRvXG4gICAqIHVzZSBgYmluZGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZnVuY3Rpb24gKCkgeyBjYXQubWVvdygpOyB9KS50by50aHJvdygpOyAgLy8gRnVuY3Rpb24gZXhwcmVzc2lvblxuICAgKiAgICAgZXhwZWN0KCgpID0+IGNhdC5tZW93KCkpLnRvLnRocm93KCk7ICAgICAgICAgICAgIC8vIEVTNiBhcnJvdyBmdW5jdGlvblxuICAgKiAgICAgZXhwZWN0KGNhdC5tZW93LmJpbmQoY2F0KSkudG8udGhyb3coKTsgICAgICAgICAgIC8vIEJpbmRcbiAgICpcbiAgICogRmluYWxseSwgaXQncyB3b3J0aCBtZW50aW9uaW5nIHRoYXQgaXQncyBhIGJlc3QgcHJhY3RpY2UgaW4gSmF2YVNjcmlwdCB0b1xuICAgKiBvbmx5IHRocm93IGBFcnJvcmAgYW5kIGRlcml2YXRpdmVzIG9mIGBFcnJvcmAgc3VjaCBhcyBgUmVmZXJlbmNlRXJyb3JgLFxuICAgKiBgVHlwZUVycm9yYCwgYW5kIHVzZXItZGVmaW5lZCBvYmplY3RzIHRoYXQgZXh0ZW5kIGBFcnJvcmAuIE5vIG90aGVyIHR5cGUgb2ZcbiAgICogdmFsdWUgd2lsbCBnZW5lcmF0ZSBhIHN0YWNrIHRyYWNlIHdoZW4gaW5pdGlhbGl6ZWQuIFdpdGggdGhhdCBzYWlkLCB0aGVcbiAgICogYHRocm93YCBhc3NlcnRpb24gZG9lcyB0ZWNobmljYWxseSBzdXBwb3J0IGFueSB0eXBlIG9mIHZhbHVlIGJlaW5nIHRocm93bixcbiAgICogbm90IGp1c3QgYEVycm9yYCBhbmQgaXRzIGRlcml2YXRpdmVzLlxuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLnRocm93c2AgYW5kIGAuVGhyb3dgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAudGhyb3dgLlxuICAgKlxuICAgKiBAbmFtZSB0aHJvd1xuICAgKiBAYWxpYXMgdGhyb3dzXG4gICAqIEBhbGlhcyBUaHJvd1xuICAgKiBAcGFyYW0ge0Vycm9yfEVycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGVyck1zZ01hdGNoZXIgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAcmV0dXJucyBlcnJvciBmb3IgY2hhaW5pbmcgKG51bGwgaWYgbm8gZXJyb3IpXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydFRocm93cyAoZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpIHx8IGZhbHNlO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICAgIGVycm9yTGlrZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNhdWdodEVycjtcbiAgICB0cnkge1xuICAgICAgb2JqKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYXVnaHRFcnIgPSBlcnI7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSB0aGUgbmVnYXRlIGZsYWcgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIHZhbGlkIGFyZ3VtZW50IGl0IG1lYW5zIHdlIGRvIGV4cGVjdCBhbiBlcnJvclxuICAgIC8vIGJ1dCB3ZSB3YW50IGl0IHRvIG1hdGNoIGEgZ2l2ZW4gc2V0IG9mIGNyaXRlcmlhXG4gICAgdmFyIGV2ZXJ5QXJnSXNVbmRlZmluZWQgPSBlcnJvckxpa2UgPT09IHVuZGVmaW5lZCAmJiBlcnJNc2dNYXRjaGVyID09PSB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB3ZSd2ZSBnb3QgdGhlIG5lZ2F0ZSBmbGFnIGVuYWJsZWQgYW5kIGJvdGggYXJncywgd2Ugc2hvdWxkIG9ubHkgZmFpbCBpZiBib3RoIGFyZW4ndCBjb21wYXRpYmxlXG4gICAgLy8gU2VlIElzc3VlICM1NTEgYW5kIFBSICM2ODNAR2l0SHViXG4gICAgdmFyIGV2ZXJ5QXJnSXNEZWZpbmVkID0gQm9vbGVhbihlcnJvckxpa2UgJiYgZXJyTXNnTWF0Y2hlcik7XG4gICAgdmFyIGVycm9yTGlrZUZhaWwgPSBmYWxzZTtcbiAgICB2YXIgZXJyTXNnTWF0Y2hlckZhaWwgPSBmYWxzZTtcblxuICAgIC8vIENoZWNraW5nIGlmIGVycm9yIHdhcyB0aHJvd25cbiAgICBpZiAoZXZlcnlBcmdJc1VuZGVmaW5lZCB8fCAhZXZlcnlBcmdJc1VuZGVmaW5lZCAmJiAhbmVnYXRlKSB7XG4gICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gZGlzcGxheSByZXN1bHRzIGNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlaXIgdHlwZXNcbiAgICAgIHZhciBlcnJvckxpa2VTdHJpbmcgPSAnYW4gZXJyb3InO1xuICAgICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGVycm9yTGlrZVN0cmluZyA9ICcje2V4cH0nO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckxpa2UpIHtcbiAgICAgICAgZXJyb3JMaWtlU3RyaW5nID0gXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBjYXVnaHRFcnJcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAnICsgZXJyb3JMaWtlU3RyaW5nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgLCBlcnJvckxpa2UgJiYgZXJyb3JMaWtlLnRvU3RyaW5nKClcbiAgICAgICAgLCAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgP1xuICAgICAgICAgICAgY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiAodHlwZW9mIGNhdWdodEVyciA9PT0gJ3N0cmluZycgPyBjYXVnaHRFcnIgOiBjYXVnaHRFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvckxpa2UgJiYgY2F1Z2h0RXJyKSB7XG4gICAgICAvLyBXZSBzaG91bGQgY29tcGFyZSBpbnN0YW5jZXMgb25seSBpZiBgZXJyb3JMaWtlYCBpcyBhbiBpbnN0YW5jZSBvZiBgRXJyb3JgXG4gICAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdmFyIGlzQ29tcGF0aWJsZUluc3RhbmNlID0gXy5jaGVja0Vycm9yLmNvbXBhdGlibGVJbnN0YW5jZShjYXVnaHRFcnIsIGVycm9yTGlrZSk7XG5cbiAgICAgICAgaWYgKGlzQ29tcGF0aWJsZUluc3RhbmNlID09PSBuZWdhdGUpIHtcbiAgICAgICAgICAvLyBUaGVzZSBjaGVja3Mgd2VyZSBjcmVhdGVkIHRvIGVuc3VyZSB3ZSB3b24ndCBmYWlsIHRvbyBzb29uIHdoZW4gd2UndmUgZ290IGJvdGggYXJncyBhbmQgYSBuZWdhdGVcbiAgICAgICAgICAvLyBTZWUgSXNzdWUgIzU1MSBhbmQgUFIgIzY4M0BHaXRIdWJcbiAgICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgbmVnYXRlXG4gICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9JyArIChjYXVnaHRFcnIgJiYgIW5lZ2F0ZSA/ICcgYnV0ICN7YWN0fSB3YXMgdGhyb3duJyA6ICcnKVxuICAgICAgICAgICAgICAsIGVycm9yTGlrZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICwgY2F1Z2h0RXJyLnRvU3RyaW5nKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9IF8uY2hlY2tFcnJvci5jb21wYXRpYmxlQ29uc3RydWN0b3IoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgIG5lZ2F0ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9JyArIChjYXVnaHRFcnIgPyAnIGJ1dCAje2FjdH0gd2FzIHRocm93bicgOiAnJylcbiAgICAgICAgICAgICwgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpKVxuICAgICAgICAgICAgLCAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycikpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXVnaHRFcnIgJiYgZXJyTXNnTWF0Y2hlciAhPT0gdW5kZWZpbmVkICYmIGVyck1zZ01hdGNoZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIEhlcmUgd2UgY2hlY2sgY29tcGF0aWJsZSBtZXNzYWdlc1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gJ2luY2x1ZGluZyc7XG4gICAgICBpZiAoZXJyTXNnTWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBwbGFjZWhvbGRlciA9ICdtYXRjaGluZydcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQ29tcGF0aWJsZU1lc3NhZ2UgPSBfLmNoZWNrRXJyb3IuY29tcGF0aWJsZU1lc3NhZ2UoY2F1Z2h0RXJyLCBlcnJNc2dNYXRjaGVyKTtcbiAgICAgIGlmIChpc0NvbXBhdGlibGVNZXNzYWdlID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgICAgZXJyTXNnTWF0Y2hlckZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgbmVnYXRlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yICcgKyBwbGFjZWhvbGRlciArICcgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBub3QgJyArIHBsYWNlaG9sZGVyICsgJyAje2V4cH0nXG4gICAgICAgICAgICAsICBlcnJNc2dNYXRjaGVyXG4gICAgICAgICAgICAsICBfLmNoZWNrRXJyb3IuZ2V0TWVzc2FnZShjYXVnaHRFcnIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGJvdGggYXNzZXJ0aW9ucyBmYWlsZWQgYW5kIGJvdGggc2hvdWxkJ3ZlIG1hdGNoZWQgd2UgdGhyb3cgYW4gZXJyb3JcbiAgICBpZiAoZXJyb3JMaWtlRmFpbCAmJiBlcnJNc2dNYXRjaGVyRmFpbCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG5lZ2F0ZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfScgKyAoY2F1Z2h0RXJyID8gJyBidXQgI3thY3R9IHdhcyB0aHJvd24nIDogJycpXG4gICAgICAgICwgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpKVxuICAgICAgICAsIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgY2F1Z2h0RXJyKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd0aHJvdycsIGFzc2VydFRocm93cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Rocm93cycsIGFzc2VydFRocm93cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ1Rocm93JywgYXNzZXJ0VGhyb3dzKTtcblxuICAvKipcbiAgICogIyMjIC5yZXNwb25kVG8obWV0aG9kWywgbXNnXSlcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgYC5yZXNwb25kVG9gIGFzc2VydHMgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGhhcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGBtZXRob2RgLiBUaGUgbWV0aG9kIGNhbiBiZSBvd24gb3JcbiAgICogaW5oZXJpdGVkLCBhbmQgaXQgY2FuIGJlIGVudW1lcmFibGUgb3Igbm9uLWVudW1lcmFibGUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8ucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIGZ1bmN0aW9uLCBgLnJlc3BvbmRUb2AgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQnc1xuICAgKiBgcHJvdG90eXBlYCBwcm9wZXJ0eSBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBgbWV0aG9kYC4gQWdhaW4sIHRoZVxuICAgKiBtZXRob2QgY2FuIGJlIG93biBvciBpbmhlcml0ZWQsIGFuZCBpdCBjYW4gYmUgZW51bWVyYWJsZSBvciBub24tZW51bWVyYWJsZS5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS50by5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogQWRkIGAuaXRzZWxmYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBmb3JjZSBgLnJlc3BvbmRUb2AgdG8gdHJlYXQgdGhlXG4gICAqIHRhcmdldCBhcyBhIG5vbi1mdW5jdGlvbiBvYmplY3QsIGV2ZW4gaWYgaXQncyBhIGZ1bmN0aW9uLiBUaHVzLCBpdCBhc3NlcnRzXG4gICAqIHRoYXQgdGhlIHRhcmdldCBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBgbWV0aG9kYCwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCdzIGBwcm90b3R5cGVgIHByb3BlcnR5IGhhcyBhIG1ldGhvZCB3aXRoIHRoZVxuICAgKiBnaXZlbiBuYW1lIGBtZXRob2RgLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICogICAgIENhdC5oaXNzID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS5pdHNlbGYudG8ucmVzcG9uZFRvKCdoaXNzJykuYnV0Lm5vdC5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogV2hlbiBub3QgYWRkaW5nIGAuaXRzZWxmYCwgaXQncyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlXG4gICAqIHVzaW5nIGAucmVzcG9uZFRvYC4gU2VlIHRoZSBgLmFgIGRvYyBmb3IgaW5mbyBvbiBjaGVja2luZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8uYmUuYW4oJ29iamVjdCcpLnRoYXQucmVzcG9uZHNUbygnbWVvdycpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnJlc3BvbmRUb2AuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBEb2cgKCkge31cbiAgICogICAgIERvZy5wcm90b3R5cGUuYmFyayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBEb2coKSkudG8ubm90LnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBgLnJlc3BvbmRUb2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt9KS50by5yZXNwb25kVG8oJ21lb3cnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe30sICdub29vIHdoeSBmYWlsPz8nKS50by5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAucmVzcG9uZHNUb2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5yZXNwb25kVG9gLlxuICAgKlxuICAgKiBAbmFtZSByZXNwb25kVG9cbiAgICogQGFsaWFzIHJlc3BvbmRzVG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gcmVzcG9uZFRvIChtZXRob2QsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBpdHNlbGYgPSBmbGFnKHRoaXMsICdpdHNlbGYnKVxuICAgICAgLCBjb250ZXh0ID0gKCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmogJiYgIWl0c2VsZilcbiAgICAgICAgPyBvYmoucHJvdG90eXBlW21ldGhvZF1cbiAgICAgICAgOiBvYmpbbWV0aG9kXTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAnZnVuY3Rpb24nID09PSB0eXBlb2YgY29udGV4dFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byByZXNwb25kIHRvICcgKyBfLmluc3BlY3QobWV0aG9kKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgcmVzcG9uZCB0byAnICsgXy5pbnNwZWN0KG1ldGhvZClcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgncmVzcG9uZFRvJywgcmVzcG9uZFRvKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgncmVzcG9uZHNUbycsIHJlc3BvbmRUbyk7XG5cbiAgLyoqXG4gICAqICMjIyAuaXRzZWxmXG4gICAqXG4gICAqIEZvcmNlcyBhbGwgYC5yZXNwb25kVG9gIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGJlaGF2ZSBhcyBpZlxuICAgKiB0aGUgdGFyZ2V0IGlzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgZXZlbiBpZiBpdCdzIGEgZnVuY3Rpb24uIFRodXMsIGl0XG4gICAqIGNhdXNlcyBgLnJlc3BvbmRUb2AgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW5cbiAgICogbmFtZSwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCdzIGBwcm90b3R5cGVgIHByb3BlcnR5IGhhcyBhXG4gICAqIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICogICAgIENhdC5oaXNzID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoQ2F0KS5pdHNlbGYudG8ucmVzcG9uZFRvKCdoaXNzJykuYnV0Lm5vdC5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXRzZWxmXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnaXRzZWxmJywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ2l0c2VsZicsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5zYXRpc2Z5KG1hdGNoZXJbLCBtc2ddKVxuICAgKlxuICAgKiBJbnZva2VzIHRoZSBnaXZlbiBgbWF0Y2hlcmAgZnVuY3Rpb24gd2l0aCB0aGUgdGFyZ2V0IGJlaW5nIHBhc3NlZCBhcyB0aGVcbiAgICogZmlyc3QgYXJndW1lbnQsIGFuZCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMDtcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnNhdGlzZnlgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMjtcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBgLnNhdGlzZnlgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMjtcbiAgICogICAgIH0sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uc2F0aXNmeShmdW5jdGlvbihudW0pIHtcbiAgICogICAgICAgcmV0dXJuIG51bSA+IDI7XG4gICAqICAgICB9KTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuc2F0aXNmaWVzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLnNhdGlzZnlgLlxuICAgKlxuICAgKiBAbmFtZSBzYXRpc2Z5XG4gICAqIEBhbGlhcyBzYXRpc2ZpZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWF0Y2hlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gc2F0aXNmeSAobWF0Y2hlciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHZhciByZXN1bHQgPSBtYXRjaGVyKG9iaik7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHJlc3VsdFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5ICcgKyBfLm9iakRpc3BsYXkobWF0Y2hlcilcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnknICsgXy5vYmpEaXNwbGF5KG1hdGNoZXIpXG4gICAgICAsIGZsYWcodGhpcywgJ25lZ2F0ZScpID8gZmFsc2UgOiB0cnVlXG4gICAgICAsIHJlc3VsdFxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzYXRpc2Z5Jywgc2F0aXNmeSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3NhdGlzZmllcycsIHNhdGlzZnkpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmNsb3NlVG8oZXhwZWN0ZWQsIGRlbHRhWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXIgdGhhdCdzIHdpdGhpbiBhIGdpdmVuICsvLSBgZGVsdGFgIHJhbmdlXG4gICAqIG9mIHRoZSBnaXZlbiBudW1iZXIgYGV4cGVjdGVkYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZVxuICAgKiB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmVxdWFsKDEuNSk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMSwgMC41KTtcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMiwgMC41KTtcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMSwgMSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuY2xvc2VUb2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoMS41KS50by5lcXVhbCgxLjUpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8ubm90LmJlLmNsb3NlVG8oMywgMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmNsb3NlVG9gIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmJlLmNsb3NlVG8oMywgMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEuNSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmNsb3NlVG8oMywgMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmFwcHJveGltYXRlbHlgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuY2xvc2VUb2AuXG4gICAqXG4gICAqIEBuYW1lIGNsb3NlVG9cbiAgICogQGFsaWFzIGFwcHJveGltYXRlbHlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG5cbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnbnVtYmVyJyk7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGRlbHRhICE9PSAnbnVtYmVyJykge1xuICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuICAgICAgdmFyIGRlbHRhTWVzc2FnZSA9IGRlbHRhID09PSB1bmRlZmluZWQgPyBcIiwgYW5kIGEgZGVsdGEgaXMgcmVxdWlyZWRcIiA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICd0aGUgYXJndW1lbnRzIHRvIGNsb3NlVG8gb3IgYXBwcm94aW1hdGVseSBtdXN0IGJlIG51bWJlcnMnICsgZGVsdGFNZXNzYWdlLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBNYXRoLmFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGFcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gJyArIGV4cGVjdGVkICsgJyArLy0gJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byAnICsgZXhwZWN0ZWQgKyAnICsvLSAnICsgZGVsdGFcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2xvc2VUbycsIGNsb3NlVG8pO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdhcHByb3hpbWF0ZWx5JywgY2xvc2VUbyk7XG5cbiAgLy8gTm90ZTogRHVwbGljYXRlcyBhcmUgaWdub3JlZCBpZiB0ZXN0aW5nIGZvciBpbmNsdXNpb24gaW5zdGVhZCBvZiBzYW1lbmVzcy5cbiAgZnVuY3Rpb24gaXNTdWJzZXRPZihzdWJzZXQsIHN1cGVyc2V0LCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSB7XG4gICAgaWYgKCFjb250YWlucykge1xuICAgICAgaWYgKHN1YnNldC5sZW5ndGggIT09IHN1cGVyc2V0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgc3VwZXJzZXQgPSBzdXBlcnNldC5zbGljZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSwgaWR4KSB7XG4gICAgICBpZiAob3JkZXJlZCkgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdKSA6IGVsZW0gPT09IHN1cGVyc2V0W2lkeF07XG5cbiAgICAgIGlmICghY21wKSB7XG4gICAgICAgIHZhciBtYXRjaElkeCA9IHN1cGVyc2V0LmluZGV4T2YoZWxlbSk7XG4gICAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBSZW1vdmUgbWF0Y2ggZnJvbSBzdXBlcnNldCBzbyBub3QgY291bnRlZCB0d2ljZSBpZiBkdXBsaWNhdGUgaW4gc3Vic2V0LlxuICAgICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIsIG1hdGNoSWR4KSB7XG4gICAgICAgIGlmICghY21wKGVsZW0sIGVsZW0yKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIFJlbW92ZSBtYXRjaCBmcm9tIHN1cGVyc2V0IHNvIG5vdCBjb3VudGVkIHR3aWNlIGlmIGR1cGxpY2F0ZSBpbiBzdWJzZXQuXG4gICAgICAgIGlmICghY29udGFpbnMpIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5tZW1iZXJzKHNldFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGFycmF5IGhhcyB0aGUgc2FtZSBtZW1iZXJzIGFzIHRoZSBnaXZlbiBhcnJheVxuICAgKiBgc2V0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubWVtYmVycyhbMiwgMSwgM10pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAyXSkudG8uaGF2ZS5tZW1iZXJzKFsyLCAxLCAyXSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1lbWJlcnMgYXJlIGNvbXBhcmVkIHVzaW5nIHN0cmljdCAoYD09PWApIGVxdWFsaXR5LiBBZGQgYC5kZWVwYFxuICAgKiBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWUgdGhlIGBkZWVwLWVxbGBcbiAgICogcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBtZW1iZXIgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW3thOiAxfV0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaGF2ZS5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgb3JkZXIgZG9lc24ndCBtYXR0ZXIuIEFkZCBgLm9yZGVyZWRgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvXG4gICAqIHJlcXVpcmUgdGhhdCBtZW1iZXJzIGFwcGVhciBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUub3JkZXJlZC5tZW1iZXJzKFsxLCAyLCAzXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLm1lbWJlcnMoWzIsIDEsIDNdKVxuICAgKiAgICAgICAuYnV0Lm5vdC5vcmRlcmVkLm1lbWJlcnMoWzIsIDEsIDNdKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYm90aCBhcnJheXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplLiBBZGQgYC5pbmNsdWRlYCBlYXJsaWVyIGluXG4gICAqIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXQgdGhlIHRhcmdldCdzIG1lbWJlcnMgYmUgYSBzdXBlcnNldCBvZiB0aGVcbiAgICogZXhwZWN0ZWQgbWVtYmVycy4gTm90ZSB0aGF0IGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgaW4gdGhlIHN1YnNldCB3aGVuXG4gICAqIGAuaW5jbHVkZWAgaXMgYWRkZWQuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgaXMgYSBzdXBlcnNldCBvZiBbMSwgMl0gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUubWVtYmVycyhbMSwgMl0pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8ubm90LmhhdmUubWVtYmVycyhbMSwgMl0pO1xuICAgKlxuICAgKiAgICAgLy8gRHVwbGljYXRlcyBpbiB0aGUgc3Vic2V0IGFyZSBpZ25vcmVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm1lbWJlcnMoWzEsIDIsIDIsIDJdKTtcbiAgICpcbiAgICogYC5kZWVwYCwgYC5vcmRlcmVkYCwgYW5kIGAuaW5jbHVkZWAgY2FuIGFsbCBiZSBjb21iaW5lZC4gSG93ZXZlciwgaWZcbiAgICogYC5pbmNsdWRlYCBhbmQgYC5vcmRlcmVkYCBhcmUgY29tYmluZWQsIHRoZSBvcmRlcmluZyBiZWdpbnMgYXQgdGhlIHN0YXJ0IG9mXG4gICAqIGJvdGggYXJyYXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFt7YTogMX0sIHtiOiAyfSwge2M6IDN9XSlcbiAgICogICAgICAgLnRvLmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoW3thOiAxfSwge2I6IDJ9XSlcbiAgICogICAgICAgLmJ1dC5ub3QuaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhbe2I6IDJ9LCB7YzogM31dKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5tZW1iZXJzYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQgYXJyYXkgZG9lc24ndCBoYXZlIGFsbCBvZiB0aGUgc2FtZSBtZW1iZXJzIGFzXG4gICAqIHRoZSBnaXZlbiBhcnJheSBgc2V0YCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBzb21lIG9mIHRoZW0uIEl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW4gYXNzZXJ0aW9uXG4gICAqIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmluY2x1ZGUoMykuYW5kLm5vdC5pbmNsdWRlKDQpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8ubm90LmhhdmUubWVtYmVycyhbMywgNF0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5tZW1iZXJzYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5oYXZlLm1lbWJlcnMoWzEsIDIsIDNdLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoWzEsIDJdLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5tZW1iZXJzKFsxLCAyLCAzXSk7XG4gICAqXG4gICAqIEBuYW1lIG1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtZW1iZXJzJywgZnVuY3Rpb24gKHN1YnNldCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcblxuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbignYXJyYXknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7XG5cbiAgICB2YXIgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpO1xuICAgIHZhciBvcmRlcmVkID0gZmxhZyh0aGlzLCAnb3JkZXJlZCcpO1xuXG4gICAgdmFyIHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG5cbiAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgIHN1YmplY3QgPSBvcmRlcmVkID8gJ2FuIG9yZGVyZWQgc3VwZXJzZXQnIDogJ2Egc3VwZXJzZXQnO1xuICAgICAgZmFpbE1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIGJlICcgKyBzdWJqZWN0ICsgJyBvZiAje2V4cH0nO1xuICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSAnICsgc3ViamVjdCArICcgb2YgI3tleHB9JztcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViamVjdCA9IG9yZGVyZWQgPyAnb3JkZXJlZCBtZW1iZXJzJyA6ICdtZW1iZXJzJztcbiAgICAgIGZhaWxNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIHRoZSBzYW1lICcgKyBzdWJqZWN0ICsgJyBhcyAje2V4cH0nO1xuICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lICcgKyBzdWJqZWN0ICsgJyBhcyAje2V4cH0nO1xuICAgIH1cblxuICAgIHZhciBjbXAgPSBmbGFnKHRoaXMsICdkZWVwJykgPyBmbGFnKHRoaXMsICdlcWwnKSA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKVxuICAgICAgLCBmYWlsTXNnXG4gICAgICAsIGZhaWxOZWdhdGVNc2dcbiAgICAgICwgc3Vic2V0XG4gICAgICAsIG9ialxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAub25lT2YobGlzdFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBhcnJheSBgbGlzdGAuIEhvd2V2ZXIsXG4gICAqIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5vbmVPZihbMSwgMiwgM10pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQ29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCB1c2luZyBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eS5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5vbmVPZmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLm9uZU9mKFsyLCAzLCA0XSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBJdCBjYW4gYWxzbyBiZSBjaGFpbmVkIHdpdGggYC5jb250YWluYCBvciBgLmluY2x1ZGVgLCB3aGljaCB3aWxsIHdvcmsgd2l0aFxuICAgKiBib3RoIGFycmF5cyBhbmQgc3RyaW5nczpcbiAgICpcbiAgICogICAgIGV4cGVjdCgnVG9kYXkgaXMgc3VubnknKS50by5jb250YWluLm9uZU9mKFsnc3VubnknLCAnY2xvdWR5J10pXG4gICAqICAgICBleHBlY3QoJ1RvZGF5IGlzIHJhaW55JykudG8ubm90LmNvbnRhaW4ub25lT2YoWydzdW5ueScsICdjbG91ZHknXSlcbiAgICogICAgIGV4cGVjdChbMSwyLDNdKS50by5jb250YWluLm9uZU9mKFszLDQsNV0pXG4gICAqICAgICBleHBlY3QoWzEsMiwzXSkudG8ubm90LmNvbnRhaW4ub25lT2YoWzQsNSw2XSlcbiAgICpcbiAgICogYC5vbmVPZmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLm9uZU9mKFsyLCAzLCA0XSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5vbmVPZihbMiwgMywgNF0pO1xuICAgKlxuICAgKiBAbmFtZSBvbmVPZlxuICAgKiBAcGFyYW0ge0FycmF5PCo+fSBsaXN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBvbmVPZiAobGlzdCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIGV4cGVjdGVkID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKVxuICAgICAgLCBpc0RlZXAgPSBmbGFnKHRoaXMsICdkZWVwJylcbiAgICAgICwgZXFsID0gZmxhZyh0aGlzLCAnZXFsJyk7XG4gICAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbignYXJyYXknKTtcblxuICAgIGlmIChjb250YWlucykge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkgeyByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMSB9KVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiBvbmUgb2YgI3tleHB9J1xuICAgICAgICAsIGxpc3RcbiAgICAgICAgLCBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHsgcmV0dXJuIGVxbChleHBlY3RlZCwgcG9zc2liaWxpdHkpIH0pXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxpc3QuaW5kZXhPZihleHBlY3RlZCkgPiAtMVxuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvbmVPZicsIG9uZU9mKTtcblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2Uoc3ViamVjdFssIHByb3BbLCBtc2ddXSlcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGAuY2hhbmdlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgZGlmZmVyZW50IHZhbHVlIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZSB0aGUgdGFyZ2V0XG4gICAqIGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyd2FyZC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IGBzdWJqZWN0YCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChnZXREb3RzKCkpLnRvLmVxdWFsKCcnKTtcbiAgICogICAgIGFkZERvdCgpO1xuICAgKiAgICAgZXhwZWN0KGdldERvdHMoKSkudG8uZXF1YWwoJy4nKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8uY2hhbmdlKGdldERvdHMpO1xuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmNoYW5nZWAgYXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGVcbiAgICogZ2l2ZW4gb2JqZWN0IGBzdWJqZWN0YCdzIGBwcm9wYCBwcm9wZXJ0eSBpcyBkaWZmZXJlbnQgYmVmb3JlIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gYWZ0ZXJ3YXJkLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge2RvdHM6ICcnfVxuICAgKiAgICAgICAsIGFkZERvdCA9IGZ1bmN0aW9uICgpIHsgbXlPYmouZG90cyArPSAnLic7IH07XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG15T2JqKS50by5oYXZlLnByb3BlcnR5KCdkb3RzJywgJycpO1xuICAgKiAgICAgYWRkRG90KCk7XG4gICAqICAgICBleHBlY3QobXlPYmopLnRvLmhhdmUucHJvcGVydHkoJ2RvdHMnLCAnLicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkRG90KS50by5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIFN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBiZWZvcmUgYW5kIGFmdGVyIHZhbHVlcy5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5jaGFuZ2VgLlxuICAgKlxuICAgKiAgICAgdmFyIGRvdHMgPSAnJ1xuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7ZG90czogJyd9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtkb3RzOiAnJ31cbiAgICogICAgICAgLCBhZGREb3QgPSBmdW5jdGlvbiAoKSB7IG15T2JqLmRvdHMgKz0gJy4nOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8ubm90LmNoYW5nZShteU9iaiwgJ2RvdHMnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhbHNvIGNhdXNlcyBhbGwgYC5ieWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG9cbiAgICogYXNzZXJ0IGhvdyBtdWNoIGEgbnVtZXJpYyBzdWJqZWN0IHdhcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5LiBIb3dldmVyLFxuICAgKiBpdCdzIGRhbmdlcm91cyB0byB1c2UgYC5jaGFuZ2UuYnlgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXNcbiAgICogdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGUgc3ViamVjdCBlaXRoZXIgaW5jcmVhc2VzIGJ5XG4gICAqIHRoZSBnaXZlbiBkZWx0YSwgb3IgdGhhdCBpdCBkZWNyZWFzZXMgYnkgdGhlIGdpdmVuIGRlbHRhLiBJdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvblxuICAgKiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuY2hhbmdlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5jaGFuZ2VgLlxuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VcbiAgICogQGFsaWFzIGNoYW5nZXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRDaGFuZ2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgZm4oKTtcblxuICAgIHZhciBmaW5hbCA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogJy4nICsgcHJvcDtcblxuICAgIC8vIFRoaXMgZ2V0cyBmbGFnZ2VkIGJlY2F1c2Ugb2YgdGhlIC5ieShkZWx0YSkgYXNzZXJ0aW9uXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnY2hhbmdlJyk7XG4gICAgZmxhZyh0aGlzLCAncmVhbERlbHRhJywgZmluYWwgIT09IGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbml0aWFsICE9PSBmaW5hbFxuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gY2hhbmdlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGNoYW5nZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2hhbmdlJywgYXNzZXJ0Q2hhbmdlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2NoYW5nZXMnLCBhc3NlcnRDaGFuZ2VzKTtcblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZShzdWJqZWN0WywgcHJvcFssIG1zZ11dKVxuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYC5pbmNyZWFzZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBmdW5jdGlvblxuICAgKiBgc3ViamVjdGAgcmV0dXJucyBhIGdyZWF0ZXIgbnVtYmVyIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gd2hlbiBpdCdzIGludm9rZWQgYmVmb3JlaGFuZC4gYC5pbmNyZWFzZWAgYWxzb1xuICAgKiBjYXVzZXMgYWxsIGAuYnlgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGFzc2VydCBob3cgbXVjaFxuICAgKiBncmVhdGVyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGluY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IHZhbCArPSAyOyB9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UoZ2V0VmFsKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmluY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGdyZWF0ZXIgYWZ0ZXIgaW52b2tpbmcgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBjb21wYXJlZCB0byBiZWZvcmVoYW5kLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluY3JlYXNlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBkZWNyZWFzZXMsIG9yIHRoYXQgaXQgc3RheXMgdGhlIHNhbWUuXG4gICAqIEl0J3Mgb2Z0ZW4gYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW5cbiAgICogd3JpdGUgYW4gYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIGRlY3JlYXNlLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgaXRcbiAgICogZGVjcmVhc2VkIGJ5IHRoZSBleHBlY3RlZCBhbW91bnQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8ubm90LmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIHN0YXkgdGhlIHNhbWUsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmNoYW5nZShteU9iaiwgJ3ZhbCcpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5pbmNyZWFzZWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgdHdvIGFyZ3VtZW50cywgYWx3YXlzXG4gICAqIHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIHZhciB2YWwgPSAxXG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3AsICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNyZWFzZShnZXRWYWwpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5pbmNyZWFzZXNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuaW5jcmVhc2VgLlxuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZVxuICAgKiBAYWxpYXMgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzdWJqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlclxuICAgIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnbnVtYmVyJyk7XG5cbiAgICBmbigpO1xuXG4gICAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICAgIHZhciBtc2dPYmogPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiAnLicgKyBwcm9wO1xuXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnaW5jcmVhc2UnKTtcbiAgICBmbGFnKHRoaXMsICdyZWFsRGVsdGEnLCBmaW5hbCAtIGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBmaW5hbCAtIGluaXRpYWwgPiAwXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBpbmNyZWFzZSdcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIG5vdCBpbmNyZWFzZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5jcmVhc2UnLCBhc3NlcnRJbmNyZWFzZXMpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbmNyZWFzZXMnLCBhc3NlcnRJbmNyZWFzZXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlY3JlYXNlKHN1YmplY3RbLCBwcm9wWywgbXNnXV0pXG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgbGVzc2VyIG51bWJlciB3aGVuIGl0J3MgaW52b2tlZCBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZWhhbmQuIGAuZGVjcmVhc2VgIGFsc29cbiAgICogY2F1c2VzIGFsbCBgLmJ5YCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBhc3NlcnQgaG93IG11Y2hcbiAgICogbGVzc2VyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBkZWNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGRlY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBzdWJ0cmFjdFR3byA9IGZ1bmN0aW9uICgpIHsgdmFsIC09IDI7IH1cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCkuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGxlc3NlciBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIGJlZm9yZWhhbmQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZGVjcmVhc2VgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHN1YmplY3QgZWl0aGVyIGluY3JlYXNlcywgb3IgdGhhdCBpdCBzdGF5cyB0aGUgc2FtZS5cbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlblxuICAgKiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gaW5jcmVhc2UsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCBpdFxuICAgKiBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5ub3QuZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSB0aGUgc2FtZSwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5ub3QuY2hhbmdlKG15T2JqLCAndmFsJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmRlY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmRlY3JlYXNlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge31cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmRlY3JlYXNlKGdldFZhbCk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmRlY3JlYXNlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5kZWNyZWFzZWAuXG4gICAqXG4gICAqIEBuYW1lIGRlY3JlYXNlXG4gICAqIEBhbGlhcyBkZWNyZWFzZXNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMgKHN1YmplY3QsIHByb3AsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBmbiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgdmFyIGluaXRpYWw7XG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyXG4gICAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdudW1iZXInKTtcblxuICAgIGZuKCk7XG5cbiAgICB2YXIgZmluYWwgPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gICAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6ICcuJyArIHByb3A7XG5cbiAgICBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicsIG1zZ09iaik7XG4gICAgZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnLCBpbml0aWFsKTtcbiAgICBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnLCBmaW5hbCk7XG4gICAgZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicsICdkZWNyZWFzZScpO1xuICAgIGZsYWcodGhpcywgJ3JlYWxEZWx0YScsIGluaXRpYWwgLSBmaW5hbCk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZpbmFsIC0gaW5pdGlhbCA8IDBcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIGRlY3JlYXNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGRlY3JlYXNlJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdkZWNyZWFzZScsIGFzc2VydERlY3JlYXNlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2RlY3JlYXNlcycsIGFzc2VydERlY3JlYXNlcyk7XG5cbiAgLyoqXG4gICAqICMjIyAuYnkoZGVsdGFbLCBtc2ddKVxuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhbiBgLmluY3JlYXNlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXRcbiAgICogdGhlIHN1YmplY3Qgb2YgdGhlIGAuaW5jcmVhc2VgIGFzc2VydGlvbiBpbmNyZWFzZWQgYnkgdGhlIGdpdmVuIGBkZWx0YWAuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuZGVjcmVhc2VgIGFzc2VydGlvbiBpbiB0aGUgY2hhaW4sIGAuYnlgIGFzc2VydHMgdGhhdCB0aGVcbiAgICogc3ViamVjdCBvZiB0aGUgYC5kZWNyZWFzZWAgYXNzZXJ0aW9uIGRlY3JlYXNlZCBieSB0aGUgZ2l2ZW4gYGRlbHRhYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuY2hhbmdlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXQgdGhlXG4gICAqIHN1YmplY3Qgb2YgdGhlIGAuY2hhbmdlYCBhc3NlcnRpb24gZWl0aGVyIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkgdGhlXG4gICAqIGdpdmVuIGBkZWx0YWAuIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIHVzZSBgLmNoYW5nZS5ieWAuIFRoZSBwcm9ibGVtIGlzXG4gICAqIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlXG4gICAqIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0c1xuICAgKiB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5ieWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgc3ViamVjdCBjaGFuZ2VkIGJ5IGl0cyBleHBlY3RlZCBkZWx0YSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgaXQgZGlkbid0IGNoYW5nZSBieSBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgZGVsdGFzLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnV0Lm5vdC5ieSgzKTtcbiAgICpcbiAgICogYC5ieWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvXG4gICAqIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kXG4gICAqIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoYWRkVHdvLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzKTtcbiAgICpcbiAgICogQG5hbWUgYnlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWx0YShkZWx0YSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgbXNnT2JqID0gZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonKTtcbiAgICB2YXIgaW5pdGlhbCA9IGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGZpbmFsID0gZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGJlaGF2aW9yID0gZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicpO1xuICAgIHZhciByZWFsRGVsdGEgPSBmbGFnKHRoaXMsICdyZWFsRGVsdGEnKTtcblxuICAgIHZhciBleHByZXNzaW9uO1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2NoYW5nZScpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cHJlc3Npb24gPSByZWFsRGVsdGEgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGV4cHJlc3Npb25cbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvICcgKyBiZWhhdmlvciArICcgYnkgJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBub3QgJyArIGJlaGF2aW9yICsgJyBieSAnICsgZGVsdGFcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYnknLCBhc3NlcnREZWx0YSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXh0ZW5zaWJsZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBleHRlbnNpYmxlLCB3aGljaCBtZWFucyB0aGF0IG5ldyBwcm9wZXJ0aWVzIGNhblxuICAgKiBiZSBhZGRlZCB0byBpdC4gUHJpbWl0aXZlcyBhcmUgbmV2ZXIgZXh0ZW5zaWJsZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXh0ZW5zaWJsZWAuXG4gICAqXG4gICAqICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSlcbiAgICogICAgICAgLCBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSlcbiAgICogICAgICAgLCBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub25FeHRlbnNpYmxlT2JqZWN0KS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbiAgICogICAgIGV4cGVjdChzZWFsZWRPYmplY3QpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEBuYW1lIGV4dGVuc2libGVcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdleHRlbnNpYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgLy8gSW4gRVM1LCBpZiB0aGUgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QgaXMgYSBwcmltaXRpdmUsIHRoZW4gaXQgd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICAvLyBJbiBFUzYsIGEgbm9uLW9iamVjdCBhcmd1bWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGEgbm9uLWV4dGVuc2libGUgb3JkaW5hcnkgb2JqZWN0LCBzaW1wbHkgcmV0dXJuIGZhbHNlLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc0V4dGVuc2libGVcbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIEVTNiBiZWhhdmlvciBmb3IgRVM1IGVudmlyb25tZW50cy5cblxuICAgIHZhciBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXNFeHRlbnNpYmxlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGUnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnNlYWxlZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzZWFsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbmV3IHByb3BlcnRpZXMgY2FuJ3QgYmVcbiAgICogYWRkZWQgdG8gaXQsIGFuZCBpdHMgZXhpc3RpbmcgcHJvcGVydGllcyBjYW4ndCBiZSByZWNvbmZpZ3VyZWQgb3IgZGVsZXRlZC5cbiAgICogSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbiBzdGlsbCBiZSByZWFzc2lnbmVkXG4gICAqIHRvIGRpZmZlcmVudCB2YWx1ZXMuIFByaW1pdGl2ZXMgYXJlIGFsd2F5cyBzZWFsZWQuXG4gICAqXG4gICAqICAgICB2YXIgc2VhbGVkT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHNlYWxlZE9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLnNlYWxlZDtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5zZWFsZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLnNlYWxlZDtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5zZWFsZWQ7XG4gICAqXG4gICAqIEBuYW1lIHNlYWxlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3NlYWxlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIHNlYWxlZCBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzU2VhbGVkXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNTZWFsZWQgPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzU2VhbGVkKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc1NlYWxlZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWQnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBzZWFsZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZnJvemVuXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGZyb3plbiwgd2hpY2ggbWVhbnMgdGhhdCBuZXcgcHJvcGVydGllcyBjYW4ndCBiZVxuICAgKiBhZGRlZCB0byBpdCwgYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbid0IGJlIHJlYXNzaWduZWQgdG8gZGlmZmVyZW50XG4gICAqIHZhbHVlcywgcmVjb25maWd1cmVkLCBvciBkZWxldGVkLiBQcmltaXRpdmVzIGFyZSBhbHdheXMgZnJvemVuLlxuICAgKlxuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuZnJvemVuO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmZyb3plbjtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5mcm96ZW5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmZyb3plbjtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5mcm96ZW47XG4gICAqXG4gICAqIEBuYW1lIGZyb3plblxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Zyb3plbicsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIGZyb3plbiBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzRnJvemVuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc0Zyb3plblxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW4nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW4nXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZmluaXRlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyLCBhbmQgaXNuJ3QgYE5hTmAgb3IgcG9zaXRpdmUvbmVnYXRpdmVcbiAgICogYEluZmluaXR5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5maW5pdGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZmluaXRlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBpc24ndCBhIG51bWJlciwgb3IgdGhhdCBpdCdzIGBOYU5gLCBvclxuICAgKiB0aGF0IGl0J3MgcG9zaXRpdmUgYEluZmluaXR5YCwgb3IgdGhhdCBpdCdzIG5lZ2F0aXZlIGBJbmZpbml0eWAuIEl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW5cbiAgICogYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXNuJ3QgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogdGhhdCBpdCdzIHRoZSBleHBlY3RlZCB0eXBlLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBpc24ndCBvbmUgb2ZcbiAgICogbWFueSB1bmV4cGVjdGVkIHR5cGVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmJlLmZpbml0ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBiZSBgTmFOYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5XG4gICAqIHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoTmFOKS50by5iZS5OYU47IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoTmFOKS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdChJbmZpbml0eSkudG8uZXF1YWwoSW5maW5pdHkpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KEluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIG5lZ2F0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgtSW5maW5pdHkpLnRvLmVxdWFsKC1JbmZpbml0eSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoLUluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZpbml0ZTtcbiAgICpcbiAgICogQG5hbWUgZmluaXRlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZmluaXRlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdudW1iZXInICYmIGlzRmluaXRlKG9iailcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICk7XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIGNoYWkuZXhwZWN0ID0gZnVuY3Rpb24gKHZhbCwgbWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgY2hhaS5Bc3NlcnRpb24odmFsLCBtZXNzYWdlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5mYWlsKFttZXNzYWdlXSlcbiAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICpcbiAgICogVGhyb3cgYSBmYWlsdXJlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0LmZhaWwoKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiPlwiKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgKlxuICAgKiBAbmFtZSBmYWlsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgY2hhaS5leHBlY3QuZmFpbCA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICBhY3R1YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ2V4cGVjdC5mYWlsKCknO1xuICAgIHRocm93IG5ldyBjaGFpLkFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAsIG9wZXJhdG9yOiBvcGVyYXRvclxuICAgIH0sIGNoYWkuZXhwZWN0LmZhaWwpO1xuICB9O1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblxuICBmdW5jdGlvbiBsb2FkU2hvdWxkICgpIHtcbiAgICAvLyBleHBsaWNpdGx5IGRlZmluZSB0aGlzIG1ldGhvZCBhcyBmdW5jdGlvbiBhcyB0byBoYXZlIGl0J3MgbmFtZSB0byBpbmNsdWRlIGFzIGBzc2ZpYFxuICAgIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nXG4gICAgICAgICAgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlclxuICAgICAgICAgIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuXG4gICAgICAgICAgfHwgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sXG4gICAgICAgICAgfHwgdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMudmFsdWVPZigpLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9jaGFpL2lzc3Vlcy84NjogdGhpcyBtYWtlc1xuICAgICAgLy8gYHdoYXRldmVyLnNob3VsZCA9IHNvbWVWYWx1ZWAgYWN0dWFsbHkgc2V0IGBzb21lVmFsdWVgLCB3aGljaCBpc1xuICAgICAgLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGBnbG9iYWwuc2hvdWxkID0gcmVxdWlyZSgnY2hhaScpLnNob3VsZCgpYC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgW1tEZWZpbmVQcm9wZXJ0eV1dIGluc3RlYWQgb2YgW1tQdXRdXVxuICAgICAgLy8gc2luY2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIHRyaWdnZXIgdGhpcyB2ZXJ5IHNldHRlciFcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2hvdWxkJywge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBtb2RpZnkgT2JqZWN0LnByb3RvdHlwZSB0byBoYXZlIGBzaG91bGRgXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICdzaG91bGQnLCB7XG4gICAgICBzZXQ6IHNob3VsZFNldHRlclxuICAgICAgLCBnZXQ6IHNob3VsZEdldHRlclxuICAgICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzaG91bGQgPSB7fTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICAgKlxuICAgICAqIFRocm93IGEgZmFpbHVyZS5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZmFpbCgpO1xuICAgICAqICAgICBzaG91bGQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgICAqICAgICBzaG91bGQuZmFpbCgxLCAyKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAgICogICAgIHNob3VsZC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAbmFtZSBmYWlsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvclxuICAgICAqIEBuYW1lc3BhY2UgQkREXG4gICAgICogQGFwaSBwdWJsaWNcbiAgICAgKi9cblxuICAgIHNob3VsZC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICAgIGFjdHVhbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Nob3VsZC5mYWlsKCknO1xuICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yXG4gICAgICB9LCBzaG91bGQuZmFpbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXF1YWwoMywgJzMnLCAnPT0gY29lcmNlcyB2YWx1ZXMgdG8gc3RyaW5ncycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLmVxdWFsID0gZnVuY3Rpb24gKHZhbDEsIHZhbDIsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwxLCBtc2cpLnRvLmVxdWFsKHZhbDIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLnRocm93KGZ1bmN0aW9uLCBbY29uc3RydWN0b3Ivc3RyaW5nL3JlZ2V4cF0sIFtzdHJpbmcvcmVnZXhwXSwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyB0aGF0IGBmdW5jdGlvbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mXG4gICAgICogYGNvbnN0cnVjdG9yYCwgb3IgYWx0ZXJuYXRlbHkgdGhhdCBpdCB3aWxsIHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgJ2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvcicpO1xuICAgICAqICAgICBzaG91bGQudGhyb3coZm4sIC9mdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3IvKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgUmVmZXJlbmNlRXJyb3IsICdmdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3InKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvciwgL2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvci8pO1xuICAgICAqXG4gICAgICogQG5hbWUgdGhyb3dcbiAgICAgKiBAYWxpYXMgVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgZm9vID0gJ2hpJztcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXhpc3QoZm9vLCAnZm9vIGV4aXN0cycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXhpc3RcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQuZXhpc3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICAgIH1cblxuICAgIC8vIG5lZ2F0aW9uXG4gICAgc2hvdWxkLm5vdCA9IHt9XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLm5vdC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgaW5lcXVhbGl0eSAoYCE9YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAgICpcbiAgICAgKiAgICAgc2hvdWxkLm5vdC5lcXVhbCgzLCA0LCAndGhlc2UgbnVtYmVycyBhcmUgbm90IGVxdWFsJyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBub3QuZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5lcXVhbCA9IGZ1bmN0aW9uICh2YWwxLCB2YWwyLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsMSwgbXNnKS50by5ub3QuZXF1YWwodmFsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAudGhyb3coZnVuY3Rpb24sIFtjb25zdHJ1Y3Rvci9yZWdleHBdLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIHRoYXQgYGZ1bmN0aW9uYCB3aWxsIF9ub3RfIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2ZcbiAgICAgKiBgY29uc3RydWN0b3JgLCBvciBhbHRlcm5hdGVseSB0aGF0IGl0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC5ub3QudGhyb3coZm4sIEVycm9yLCAnZnVuY3Rpb24gZG9lcyBub3QgdGhyb3cnKTtcbiAgICAgKlxuICAgICAqIEBuYW1lIG5vdC50aHJvd1xuICAgICAqIEBhbGlhcyBub3QuVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5UaHJvdyA9IGZ1bmN0aW9uIChmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLm5vdC5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5ub3QuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgYmFyID0gbnVsbDtcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQubm90LmV4aXN0KGJhciwgJ2JhciBkb2VzIG5vdCBleGlzdCcpO1xuICAgICAqXG4gICAgICogQG5hbWUgbm90LmV4aXN0XG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5leGlzdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICAgIH1cblxuICAgIHNob3VsZFsndGhyb3cnXSA9IHNob3VsZFsnVGhyb3cnXTtcbiAgICBzaG91bGQubm90Wyd0aHJvdyddID0gc2hvdWxkLm5vdFsnVGhyb3cnXTtcblxuICAgIHJldHVybiBzaG91bGQ7XG4gIH07XG5cbiAgY2hhaS5zaG91bGQgPSBsb2FkU2hvdWxkO1xuICBjaGFpLlNob3VsZCA9IGxvYWRTaG91bGQ7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcbiAgLyohXG4gICAqIENoYWkgZGVwZW5kZW5jaWVzLlxuICAgKi9cblxuICB2YXIgQXNzZXJ0aW9uID0gY2hhaS5Bc3NlcnRpb25cbiAgICAsIGZsYWcgPSB1dGlsLmZsYWc7XG5cbiAgLyohXG4gICAqIE1vZHVsZSBleHBvcnQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiAjIyMgYXNzZXJ0KGV4cHJlc3Npb24sIG1lc3NhZ2UpXG4gICAqXG4gICAqIFdyaXRlIHlvdXIgb3duIHRlc3QgZXhwcmVzc2lvbnMuXG4gICAqXG4gICAqICAgICBhc3NlcnQoJ2ZvbycgIT09ICdiYXInLCAnZm9vIGlzIG5vdCBiYXInKTtcbiAgICogICAgIGFzc2VydChBcnJheS5pc0FycmF5KFtdKSwgJ2VtcHR5IGFycmF5cyBhcmUgYXJyYXlzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cHJlc3Npb24gdG8gdGVzdCBmb3IgdHJ1dGhpbmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSB0byBkaXNwbGF5IG9uIGVycm9yXG4gICAqIEBuYW1lIGFzc2VydFxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB2YXIgYXNzZXJ0ID0gY2hhaS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwcmVzcywgZXJybXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG51bGwsIG51bGwsIGNoYWkuYXNzZXJ0LCB0cnVlKTtcbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwcmVzc1xuICAgICAgLCBlcnJtc2dcbiAgICAgICwgJ1sgbmVnYXRpb24gbWVzc2FnZSB1bmF2YWlsYWJsZSBdJ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAqICMjIyAuZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0sIFtvcGVyYXRvcl0pXG4gICAqXG4gICAqIFRocm93IGEgZmFpbHVyZS4gTm9kZS5qcyBgYXNzZXJ0YCBtb2R1bGUtY29tcGF0aWJsZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5mYWlsKCk7XG4gICAqICAgICBhc3NlcnQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCB1bmRlZmluZWQsIFwiPlwiKTtcbiAgICpcbiAgICogQG5hbWUgZmFpbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIC8vIENvbXBseSB3aXRoIE5vZGUncyBmYWlsKFttZXNzYWdlXSkgaW50ZXJmYWNlXG5cbiAgICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgICAgYWN0dWFsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdhc3NlcnQuZmFpbCgpJztcbiAgICB0aHJvdyBuZXcgY2hhaS5Bc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAsIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgLCBvcGVyYXRvcjogb3BlcmF0b3JcbiAgICB9LCBhc3NlcnQuZmFpbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc09rKCdldmVyeXRoaW5nJywgJ2V2ZXJ5dGhpbmcgaXMgb2snKTtcbiAgICogICAgIGFzc2VydC5pc09rKGZhbHNlLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICpcbiAgICogQG5hbWUgaXNPa1xuICAgKiBAYWxpYXMgb2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzT2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPaywgdHJ1ZSkuaXMub2s7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZhbHN5LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90T2soJ2V2ZXJ5dGhpbmcnLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICogICAgIGFzc2VydC5pc05vdE9rKGZhbHNlLCAndGhpcyB3aWxsIHBhc3MnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPa1xuICAgKiBAYWxpYXMgbm90T2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPaywgdHJ1ZSkuaXMubm90Lm9rO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5lcXVhbCgzLCAnMycsICc9PSBjb2VyY2VzIHZhbHVlcyB0byBzdHJpbmdzJyk7XG4gICAqXG4gICAqIEBuYW1lIGVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIHZhciB0ZXN0ID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmVxdWFsLCB0cnVlKTtcblxuICAgIHRlc3QuYXNzZXJ0KFxuICAgICAgICBleHAgPT0gZmxhZyh0ZXN0LCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3thY3R9J1xuICAgICAgLCBleHBcbiAgICAgICwgYWN0XG4gICAgICAsIHRydWVcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGluZXF1YWxpdHkgKGAhPWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEVxdWFsKDMsIDQsICd0aGVzZSBudW1iZXJzIGFyZSBub3QgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgbm90RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RXF1YWwsIHRydWUpO1xuXG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIGV4cCAhPSBmbGFnKHRlc3QsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH0nXG4gICAgICAsIGV4cFxuICAgICAgLCBhY3RcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHN0cmljdCBlcXVhbGl0eSAoYD09PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHRydWUsICd0aGVzZSBib29sZWFucyBhcmUgc3RyaWN0bHkgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgc3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LnN0cmljdEVxdWFsLCB0cnVlKS50by5lcXVhbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBzdHJpY3QgaW5lcXVhbGl0eSAoYCE9PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKDMsICczJywgJ25vIGNvZXJjaW9uIGZvciBzdHJpY3QgZXF1YWxpdHknKTtcbiAgICpcbiAgICogQG5hbWUgbm90U3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLCB0cnVlKS50by5ub3QuZXF1YWwoZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGFjdHVhbGAgaXMgZGVlcGx5IGVxdWFsIHRvIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcEVxdWFsKHsgdGVhOiAnZ3JlZW4nIH0sIHsgdGVhOiAnZ3JlZW4nIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwRXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhbGlhcyBkZWVwU3RyaWN0RXF1YWxcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydCB0aGF0IGBhY3R1YWxgIGlzIG5vdCBkZWVwbHkgZXF1YWwgdG8gYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwRXF1YWwoeyB0ZWE6ICdncmVlbicgfSwgeyB0ZWE6ICdqYXNtaW5lJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcEVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RGVlcEVxdWFsLCB0cnVlKS50by5ub3QuZXFsKGV4cCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQWJvdmUodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBYm92ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAoPikgYHZhbHVlVG9CZUFib3ZlYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0Fib3ZlKDUsIDIsICc1IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAyJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQWJvdmVcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUFib3ZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Fib3ZlID0gZnVuY3Rpb24gKHZhbCwgYWJ2LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBYm92ZSwgdHJ1ZSkudG8uYmUuYWJvdmUoYWJ2KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdExlYXN0KHZhbHVlVG9DaGVjaywgdmFsdWVUb0JlQXRMZWFzdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAoPj0pIGB2YWx1ZVRvQmVBdExlYXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TGVhc3QoNSwgMiwgJzUgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAyJyk7XG4gICAqICAgICBhc3NlcnQuaXNBdExlYXN0KDMsIDMsICczIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0F0TGVhc3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUF0TGVhc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uICh2YWwsIGF0bHN0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQmVsb3codmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVCZWxvdywgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGxlc3MgdGhhbiAoPCkgYHZhbHVlVG9CZUJlbG93YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0JlbG93KDMsIDYsICczIGlzIHN0cmljdGx5IGxlc3MgdGhhbiA2Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQmVsb3dcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUJlbG93XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0JlbG93ID0gZnVuY3Rpb24gKHZhbCwgYmx3LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCZWxvdywgdHJ1ZSkudG8uYmUuYmVsb3coYmx3KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdE1vc3QodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBdE1vc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBgdmFsdWVUb0NoZWNrYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKDw9KSBgdmFsdWVUb0JlQXRNb3N0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TW9zdCgzLCA2LCAnMyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNicpO1xuICAgKiAgICAgYXNzZXJ0LmlzQXRNb3N0KDQsIDQsICc0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXRNb3N0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9DaGVja1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQmVBdE1vc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRNb3N0ID0gZnVuY3Rpb24gKHZhbCwgYXRtc3QsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TW9zdCwgdHJ1ZSkudG8uYmUubW9zdChhdG1zdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNUcnVlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIHRydWUuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gdHJ1ZTtcbiAgICogICAgIGFzc2VydC5pc1RydWUodGVhU2VydmVkLCAndGhlIHRlYSBoYXMgYmVlbiBzZXJ2ZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNUcnVlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc1RydWUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1sndHJ1ZSddO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90VHJ1ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgdHJ1ZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RUcnVlKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90VHJ1ZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RUcnVlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90VHJ1ZSwgdHJ1ZSkudG8ubm90LmVxdWFsKHRydWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRmFsc2UodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgZmFsc2UuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gZmFsc2U7XG4gICAqICAgICBhc3NlcnQuaXNGYWxzZSh0ZWFTZXJ2ZWQsICdubyB0ZWEgeWV0PyBobW0uLi4nKTtcbiAgICpcbiAgICogQG5hbWUgaXNGYWxzZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1snZmFsc2UnXTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEZhbHNlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCBmYWxzZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RGYWxzZSh0ZWEsICdncmVhdCwgdGltZSBmb3IgdGVhIScpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEZhbHNlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOdWxsKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG51bGwuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOdWxsKGVyciwgJ3RoZXJlIHdhcyBubyBlcnJvcicpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bGxcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TnVsbCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgbnVsbC5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3ROdWxsKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVsbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVsbCwgdHJ1ZSkudG8ubm90LmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTmFOXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB2YWx1ZSBpcyBOYU4uXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOYU4oTmFOLCAnTmFOIGlzIE5hTicpO1xuICAgKlxuICAgKiBAbmFtZSBpc05hTlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOYU4sIHRydWUpLnRvLmJlLk5hTjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE5hTlxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdmFsdWUgaXMgbm90IE5hTi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdE5hTig0LCAnNCBpcyBub3QgTmFOJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TmFOXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuICBhc3NlcnQuaXNOb3ROYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROYU4sIHRydWUpLm5vdC50by5iZS5OYU47XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciBmb28gPSAnaGknO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmV4aXN0cyhmb28sICdmb28gaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgJyk7XG4gICAqXG4gICAqIEBuYW1lIGV4aXN0c1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXhpc3RzID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmV4aXN0cywgdHJ1ZSkudG8uZXhpc3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVpdGhlciBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgYmFyID0gbnVsbFxuICAgKiAgICAgICAsIGJhejtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmFyKTtcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmF6LCAnYmF6IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RFeGlzdHNcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEV4aXN0cyA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RFeGlzdHMsIHRydWUpLnRvLm5vdC5leGlzdDtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1VuZGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciB0ZWE7XG4gICAqICAgICBhc3NlcnQuaXNVbmRlZmluZWQodGVhLCAnbm8gdGVhIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNVbmRlZmluZWRcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVW5kZWZpbmVkLCB0cnVlKS50by5lcXVhbCh1bmRlZmluZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgdGVhID0gJ2N1cCBvZiBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc0RlZmluZWQodGVhLCAndGVhIGhhcyBiZWVuIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNEZWZpbmVkXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNEZWZpbmVkLCB0cnVlKS50by5ub3QuZXF1YWwodW5kZWZpbmVkKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Z1bmN0aW9uKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBzZXJ2ZVRlYSgpIHsgcmV0dXJuICdjdXAgb2YgdGVhJzsgfTtcbiAgICogICAgIGFzc2VydC5pc0Z1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGNhbiBoYXZlIHRlYSBub3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXNGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Z1bmN0aW9uLCB0cnVlKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnVuY3Rpb24odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBmdW5jdGlvbi5cbiAgICpcbiAgICogICAgIHZhciBzZXJ2ZVRlYSA9IFsgJ2hlYXQnLCAncG91cicsICdzaXAnIF07XG4gICAqICAgICBhc3NlcnQuaXNOb3RGdW5jdGlvbihzZXJ2ZVRlYSwgJ2dyZWF0LCB3ZSBoYXZlIGxpc3RlZCB0aGUgc3RlcHMnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEZ1bmN0aW9uLCB0cnVlKS50by5ub3QuYmUuYSgnZnVuY3Rpb24nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc09iamVjdCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBvYmplY3Qgb2YgdHlwZSAnT2JqZWN0JyAoYXMgcmV2ZWFsZWQgYnkgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgKS5cbiAgICogX1RoZSBhc3NlcnRpb24gZG9lcyBub3QgbWF0Y2ggc3ViY2xhc3NlZCBvYmplY3RzLl9cbiAgICpcbiAgICogICAgIHZhciBzZWxlY3Rpb24gPSB7IG5hbWU6ICdDaGFpJywgc2VydmU6ICd3aXRoIHNwaWNlcycgfTtcbiAgICogICAgIGFzc2VydC5pc09iamVjdChzZWxlY3Rpb24sICd0ZWEgc2VsZWN0aW9uIGlzIGFuIG9iamVjdCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc09iamVjdFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNPYmplY3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPYmplY3QsIHRydWUpLnRvLmJlLmEoJ29iamVjdCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90T2JqZWN0KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGFuIG9iamVjdCBvZiB0eXBlICdPYmplY3QnIChhcyByZXZlYWxlZCBieSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2ApLlxuICAgKlxuICAgKiAgICAgdmFyIHNlbGVjdGlvbiA9ICdjaGFpJ1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KHNlbGVjdGlvbiwgJ3RlYSBzZWxlY3Rpb24gaXMgbm90IGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KG51bGwsICdudWxsIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPYmplY3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2JqZWN0ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2JqZWN0LCB0cnVlKS50by5ub3QuYmUuYSgnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNBcnJheSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBhcnJheS5cbiAgICpcbiAgICogICAgIHZhciBtZW51ID0gWyAnZ3JlZW4nLCAnY2hhaScsICdvb2xvbmcnIF07XG4gICAqICAgICBhc3NlcnQuaXNBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0FycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90QXJyYXkodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYW4gYXJyYXkuXG4gICAqXG4gICAqICAgICB2YXIgbWVudSA9ICdncmVlbnxjaGFpfG9vbG9uZyc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEFycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEFycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90QXJyYXksIHRydWUpLnRvLm5vdC5iZS5hbignYXJyYXknKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1N0cmluZyh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciB0ZWFPcmRlciA9ICdjaGFpJztcbiAgICogICAgIGFzc2VydC5pc1N0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1N0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNTdHJpbmcsIHRydWUpLnRvLmJlLmEoJ3N0cmluZycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90U3RyaW5nKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGEgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYU9yZGVyID0gNDtcbiAgICogICAgIGFzc2VydC5pc05vdFN0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdFN0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RTdHJpbmcsIHRydWUpLnRvLm5vdC5iZS5hKCdzdHJpbmcnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc051bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gMjtcbiAgICogICAgIGFzc2VydC5pc051bWJlcihjdXBzLCAnaG93IG1hbnkgY3VwcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bWJlclxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKCdudW1iZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE51bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gJzIgY3VwcyBwbGVhc2UnO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90TnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVtYmVyXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoJ251bWJlcicpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5pc0Zpbml0ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIuIFVubGlrZSBgLmlzTnVtYmVyYCwgdGhpcyB3aWxsIGZhaWwgZm9yIGBOYU5gIGFuZCBgSW5maW5pdHlgLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAyO1xuICAgKiAgICAgYXNzZXJ0LmlzRmluaXRlKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNGaW5pdGUoTmFOKTsgLy8gdGhyb3dzXG4gICAqXG4gICAqIEBuYW1lIGlzRmluaXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGaW5pdGUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGaW5pdGUsIHRydWUpLnRvLmJlLmZpbml0ZTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Jvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gdHJ1ZVxuICAgKiAgICAgICAsIHRlYVNlcnZlZCA9IGZhbHNlO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQm9vbGVhbih0ZWFSZWFkeSwgJ2lzIHRoZSB0ZWEgcmVhZHknKTtcbiAgICogICAgIGFzc2VydC5pc0Jvb2xlYW4odGVhU2VydmVkLCAnaGFzIHRlYSBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc0Jvb2xlYW5cbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Jvb2xlYW4sIHRydWUpLnRvLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEJvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gJ3llcCdcbiAgICogICAgICAgLCB0ZWFTZXJ2ZWQgPSAnbm9wZSc7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RCb29sZWFuKHRlYVJlYWR5LCAnaXMgdGhlIHRlYSByZWFkeScpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90Qm9vbGVhbih0ZWFTZXJ2ZWQsICdoYXMgdGVhIGJlZW4gc2VydmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90Qm9vbGVhblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC50eXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQudHlwZU9mKHsgdGVhOiAnY2hhaScgfSwgJ29iamVjdCcsICd3ZSBoYXZlIGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZihbJ2NoYWknLCAnamFzbWluZSddLCAnYXJyYXknLCAnd2UgaGF2ZSBhbiBhcnJheScpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZigndGVhJywgJ3N0cmluZycsICd3ZSBoYXZlIGEgc3RyaW5nJyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKC90ZWEvLCAncmVnZXhwJywgJ3dlIGhhdmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YobnVsbCwgJ251bGwnLCAnd2UgaGF2ZSBhIG51bGwnKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YodW5kZWZpbmVkLCAndW5kZWZpbmVkJywgJ3dlIGhhdmUgYW4gdW5kZWZpbmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIHR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQudHlwZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RUeXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIF9ub3RfIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90VHlwZU9mKCd0ZWEnLCAnbnVtYmVyJywgJ3N0cmluZ3MgYXJlIG5vdCBudW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZW9mIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RUeXBlT2YsIHRydWUpLnRvLm5vdC5iZS5hKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlT2Yob2JqZWN0LCBjb25zdHJ1Y3RvciwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFRlYSgnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBhbiBpbnN0YW5jZSBvZiB0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgaW5zdGFuY2VPZlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5zdGFuY2VPZihvYmplY3QsIGNvbnN0cnVjdG9yLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlYCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIHZhciBUZWEgPSBmdW5jdGlvbiAobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG4gICAqICAgICAgICwgY2hhaSA9IG5ldyBTdHJpbmcoJ2NoYWknKTtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbnN0YW5jZU9mKGNoYWksIFRlYSwgJ2NoYWkgaXMgbm90IGFuIGluc3RhbmNlIG9mIHRlYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbnN0YW5jZU9mXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluc3RhbmNlT2YgPSBmdW5jdGlvbiAodmFsLCB0eXBlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90SW5zdGFuY2VPZiwgdHJ1ZSlcbiAgICAgIC50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBoYXlzdGFja2AgaW5jbHVkZXMgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGVcbiAgICogaW5jbHVzaW9uIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXksIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nLCBvciBhIHN1YnNldCBvZlxuICAgKiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKFsxLDIsM10sIDIsICdhcnJheSBjb250YWlucyB2YWx1ZScpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoJ2Zvb2JhcicsICdmb28nLCAnc3RyaW5nIGNvbnRhaW5zIHN1YnN0cmluZycpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoeyBmb286ICdiYXInLCBoZWxsbzogJ3VuaXZlcnNlJyB9LCB7IGZvbzogJ2JhcicgfSwgJ29iamVjdCBjb250YWlucyBwcm9wZXJ0eScpO1xuICAgKlxuICAgKiBTdHJpY3QgZXF1YWxpdHkgKD09PSkgaXMgdXNlZC4gV2hlbiBhc3NlcnRpbmcgdGhlIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluXG4gICAqIGFuIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgZm9yIGFuIGVsZW1lbnQgdGhhdCdzIHN0cmljdGx5IGVxdWFsIHRvIHRoZVxuICAgKiBnaXZlbiB2YWx1ZS4gV2hlbiBhc3NlcnRpbmcgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhbiBvYmplY3QsIHRoZSBvYmplY3RcbiAgICogaXMgc2VhcmNoZWQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBrZXlzLCBjaGVja2luZyB0aGF0IGVhY2ggb25lIGlzIHByZXNlbnRcbiAgICogYW5kIHN0cmljdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZS4gRm9yIGluc3RhbmNlOlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoW29iajEsIG9iajJdLCBvYmoxKTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajF9KTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajEsIGJhcjogb2JqMn0pO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGRvZXMgbm90IGluY2x1ZGUgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydFxuICAgKiB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuIGFycmF5LCBhIHN1YnN0cmluZyBpbiBhIHN0cmluZywgb3IgYSBzdWJzZXQgb2ZcbiAgICogcHJvcGVydGllcyBpbiBhbiBvYmplY3QuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZShbMSwyLDNdLCA0LCBcImFycmF5IGRvZXNuJ3QgY29udGFpbiB2YWx1ZVwiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKCdmb29iYXInLCAnYmF6JywgXCJzdHJpbmcgZG9lc24ndCBjb250YWluIHN1YnN0cmluZ1wiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHsgZm9vOiAnYmFyJywgaGVsbG86ICd1bml2ZXJzZScgfSwgeyBmb286ICdiYXonIH0sICdvYmplY3QgZG9lc24ndCBjb250YWluIHByb3BlcnR5Jyk7XG4gICAqXG4gICAqIFN0cmljdCBlcXVhbGl0eSAoPT09KSBpcyB1c2VkLiBXaGVuIGFzc2VydGluZyB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuXG4gICAqIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgdG8gY29uZmlybSB0aGUgYWJzZW5jZSBvZiBhbiBlbGVtZW50IHRoYXQnc1xuICAgKiBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuIFdoZW4gYXNzZXJ0aW5nIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW5cbiAgICogYW4gb2JqZWN0LCB0aGUgb2JqZWN0IGlzIHNlYXJjaGVkIHRvIGNvbmZpcm0gdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuXG4gICAqIHByb3BlcnR5IGtleXMgaXMgZWl0aGVyIG5vdCBwcmVzZW50IG9yIG5vdCBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW5cbiAgICogcHJvcGVydHkgdmFsdWUuIEZvciBpbnN0YW5jZTpcbiAgICpcbiAgICogICAgIHZhciBvYmoxID0ge2E6IDF9XG4gICAqICAgICAgICwgb2JqMiA9IHtiOiAyfTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDF9KTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzogb2JqMSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZVxuICAgKiBAcGFyYW0ge0FycmF5fFN0cmluZ30gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGluY2x1ZGVzIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlXG4gICAqIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluIGFuIGFycmF5IG9yIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgKiBEZWVwIGVxdWFsaXR5IGlzIHVzZWQuXG4gICAqXG4gICAqICAgICB2YXIgb2JqMSA9IHthOiAxfVxuICAgKiAgICAgICAsIG9iajIgPSB7YjogMn07XG4gICAqICAgICBhc3NlcnQuZGVlcEluY2x1ZGUoW29iajEsIG9iajJdLCB7YTogMX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcEluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGhheXN0YWNrYCBkb2VzIG5vdCBpbmNsdWRlIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnRcbiAgICogdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBhbiBhcnJheSBvciBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICogRGVlcCBlcXVhbGl0eSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDl9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogOX19KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogMX0sIGJhcjoge2I6IDl9fSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBJbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkSW5jbHVkZSh7Jy5hJzogeydiJzogJ3gnfX0sIHsnXFxcXC5hLltiXSc6ICd4J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3gnfSk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5uZXN0ZWRJbmNsdWRlLCB0cnVlKS5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE5lc3RlZEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBkb2VzIG5vdCBpbmNsdWRlICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3QuXG4gICAqIEVuYWJsZXMgdGhlIHVzZSBvZiBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciByZWZlcmVuY2luZyBuZXN0ZWRcbiAgICogcHJvcGVydGllcy5cbiAgICogJ1tdJyBhbmQgJy4nIGluIHByb3BlcnR5IG5hbWVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIGRvdWJsZSBiYWNrc2xhc2hlcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J2InOiAneCd9fSwgeydcXFxcLmEuYic6ICd5J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3knfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBOZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUoe2E6IHtiOiBbe3g6IDF9XX19LCB7J2EuYlswXSc6IHt4OiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt4OiAxfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwTmVzdGVkSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGRvZXMgbm90IGluY2x1ZGUgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgYWJzZW5jZSBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIHJlZmVyZW5jaW5nIG5lc3RlZFxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiAnW10nIGFuZCAnLicgaW4gcHJvcGVydHkgbmFtZXMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgZG91YmxlIGJhY2tzbGFzaGVzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHthOiB7YjogW3t4OiAxfV19fSwgeydhLmJbMF0nOiB7eTogMX19KVxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt5OiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGluY2x1c2lvbiBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBpZ25vcmluZyBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25JbmNsdWRlKHsgYTogMSB9LCB7IGE6IDEgfSk7XG4gICAqXG4gICAqIEBuYW1lIG93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm93bkluY2x1ZGUsIHRydWUpLm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90T3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICAgICBPYmplY3QucHJvdG90eXBlLmIgPSAyO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93bkluY2x1ZGUoeyBhOiAxIH0sIHsgYjogMiB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90T3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBpbmNsdXNpb24gb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKlxuICAgKiAgICAgIGFzc2VydC5kZWVwT3duSW5jbHVkZSh7YToge2I6IDJ9fSwge2E6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwT3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAubm90RGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBhYnNlbmNlIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGlnbm9yaW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFuZCBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICpcbiAgICogICAgICBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUoe2E6IHtiOiAyfX0sIHthOiB7YzogM319KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcE93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSlcbiAgICAgIC5ub3QuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm1hdGNoKHZhbHVlLCByZWdleHAsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGByZWdleHBgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm1hdGNoKCdmb29iYXInLCAvXmZvby8sICdyZWdleHAgbWF0Y2hlcycpO1xuICAgKlxuICAgKiBAbmFtZSBtYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RNYXRjaCh2YWx1ZSwgcmVnZXhwLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGRvZXMgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBkb2VzIG5vdCBtYXRjaCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RNYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TWF0Y2gsIHRydWUpLnRvLm5vdC5tYXRjaChyZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAucHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYScpO1xuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5wcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgIHdpdGggYSB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrXG4gICAqICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5VmFsKHsgdGVhOiAnaXMgZ29vZCcgfSwgJ3RlYScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZFxuICAgKiBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVja1xuICAgKiAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCh7IHRlYTogJ2lzIGdvb2QnIH0sICd0ZWEnLCAnaXMgYmFkJyk7XG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHlWYWwoeyB0ZWE6ICdpcyBnb29kJyB9LCAnY29mZmVlJywgJ2lzIGdvb2QnKTtcbiAgICpcbiAgICogQG5hbWUgbm90UHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCB3aXRoIGEgdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAgd2l0aCB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgYmxhY2s6ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBncmVlbjogJ29vbG9uZycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICdjb2ZmZWUnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLiBJbmhlcml0ZWRcbiAgICogcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICd0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgb3duUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93blByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCh7IGNvZmZlZTogJ2lzIGdvb2QnfSwgJ2NvZmZlZScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIG93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3QgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YFxuICAgKiB3aXRoIGEgdmFsdWUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGB2YWx1ZWAuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2tcbiAgICogKD09PSkuIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsKHsgdGVhOiAnaXMgYmV0dGVyJ30sICd0ZWEnLCAnaXMgd29yc2UnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay4gSW5oZXJpdGVkXG4gICAqIHByb3BlcnRpZXMgYXJlbid0IGNoZWNrZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgXG4gICAqIHdpdGggYSB2YWx1ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBibGFjazogJ21hdGNoYScgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnb29sb25nJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ2NvZmZlZScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBPd25Qcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5lc3RlZFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCwgd2hpY2ggY2FuIGJlIGEgc3RyaW5nIHVzaW5nIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yXG4gICAqIG5lc3RlZCByZWZlcmVuY2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkUHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJyk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLCB3aGljaFxuICAgKiBjYW4gYmUgYSBzdHJpbmcgdXNpbmcgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgbmVzdGVkIHJlZmVyZW5jZS4gVGhlXG4gICAqIHByb3BlcnR5IGNhbm5vdCBleGlzdCBvbiB0aGUgb2JqZWN0IG5vciBhbnl3aGVyZSBpbiBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5vb2xvbmcnKTtcbiAgICpcbiAgICogQG5hbWUgbm90TmVzdGVkUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdtYXRjaGEnKTtcbiAgICpcbiAgICogQG5hbWUgbmVzdGVkUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdrb25hY2hhJyk7XG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlLmdyZWVuJywgJ21hdGNoYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3ROZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwTmVzdGVkUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAgd2l0aCBhIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVtJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE5lc3RlZFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgb29sb25nOiAneXVtJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVjaycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiB7IG1hdGNoYTogJ3l1bScgfSB9IH0sICd0ZWEuYmxhY2snLCB7IG1hdGNoYTogJ3l1bScgfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5sZW5ndGhPZihvYmplY3QsIGxlbmd0aCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgYGxlbmd0aGAgb3IgYHNpemVgIHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKFsxLDIsM10sIDMsICdhcnJheSBoYXMgbGVuZ3RoIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZignZm9vYmFyJywgNiwgJ3N0cmluZyBoYXMgbGVuZ3RoIG9mIDYnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgU2V0KFsxLDIsM10pLCAzLCAnc2V0IGhhcyBzaXplIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgTWFwKFtbJ2EnLDFdLFsnYicsMl0sWydjJywzXV0pLCAzLCAnbWFwIGhhcyBzaXplIG9mIDMnKTtcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24gKGV4cCwgbGVuLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5oYXNBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ2ZvbycsICdpRG9udEV4aXN0JywgJ2JheiddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGlEb250RXhpc3Q6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSksIFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10pO1xuICAgKlxuICAgKiBAbmFtZSBoYXNBbnlLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaGFzQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBhbmQgb25seSBhbGwgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGhhc0FsbEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmhhc0FsbEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkIGJ1dCBtYXkgaGF2ZSBtb3JlIGtleXMgbm90IGxpc3RlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydmb28nLCAnYmF6J10pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGJhejogMTMzN30pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe2ZvbzogJ2Jhcid9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGNvbnRhaW5zQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY29udGFpbnNBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdEhhdmVBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgbm9uZSBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ29uZScsICd0d28nLCAnZXhhbXBsZSddKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCB7b25lOiAxLCB0d286IDIsIGV4YW1wbGU6ICdmb28nfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyhuZXcgU2V0KFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10sIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueUtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYW55LmtleXMoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90SGF2ZUFsbEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnb25lJywgJ3R3bycsICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtvbmU6IDEsIHR3bzogMiwgZXhhbXBsZTogJ2Zvbyd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmhhc0FueURlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXSwgWzEsIDJdXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0aHJlZTogJ3RocmVlJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQW55RGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmhhc0FsbERlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYWxsIGFuZCBvbmx5IGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ31dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGNvbnRhaW5zIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHtvbmU6ICdvbmUnfSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgY29udGFpbnNBbGxEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQW55RGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBub25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7dHdlbnR5OiAndHdlbnR5J30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwgW3t0d2VudHk6ICd0d2VudHknfSwge2ZpZnR5OiAnZmlmdHknfV0pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueURlZXBLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7b25lOiAnb25lJ31dKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHt0d2VudHk6ICd0d2VudHknfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAudGhyb3dzKGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgJ0Vycm9yIHRocm93biBtdXN0IGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIC9FcnJvciB0aHJvd24gbXVzdCBoYXZlIGEgbXNnIHRoYXQgbWF0Y2hlcyB0aGlzLyk7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBlcnJvckluc3RhbmNlKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAnRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgaGF2ZSB0aGlzIG1zZycpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAvRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgbWF0Y2ggdGhpcy8pO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgL0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIG1hdGNoIHRoaXMvKTtcbiAgICpcbiAgICogQG5hbWUgdGhyb3dzXG4gICAqIEBhbGlhcyB0aHJvd1xuICAgKiBAYWxpYXMgVGhyb3dcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfEVycm9yfSBlcnJvckxpa2VcbiAgICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBlcnJNc2dNYXRjaGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uIChmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgYXNzZXJ0RXJyID0gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQudGhyb3dzLCB0cnVlKVxuICAgICAgLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gICAgcmV0dXJuIGZsYWcoYXNzZXJ0RXJyLCAnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdFRocm93KGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCBfbm90XyB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyBfbm90XyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgX25vdF8gaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgJ0FueSBFcnJvciB0aHJvd24gbXVzdCBub3QgaGF2ZSB0aGlzIG1lc3NhZ2UnKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIC9BbnkgRXJyb3IgdGhyb3duIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIEVycm9yKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgRXJyb3IsICdFcnJvciBtdXN0IG5vdCBoYXZlIHRoaXMgbWVzc2FnZScpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIG11c3Qgbm90IGhhdmUgdGhpcyBtZXNzYWdlJyk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCBFcnJvciwgL0Vycm9yIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UsIC9FcnJvciBtdXN0IG5vdCBtYXRjaCB0aGlzLyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RUaHJvd1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge0Vycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGVyck1zZ01hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgICBlcnJvckxpa2UgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RUaHJvdywgdHJ1ZSlcbiAgICAgIC50by5ub3QudGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5vcGVyYXRvcih2YWwxLCBvcGVyYXRvciwgdmFsMiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBDb21wYXJlcyB0d28gdmFsdWVzIHVzaW5nIGBvcGVyYXRvcmAuXG4gICAqXG4gICAqICAgICBhc3NlcnQub3BlcmF0b3IoMSwgJzwnLCAyLCAnZXZlcnl0aGluZyBpcyBvaycpO1xuICAgKiAgICAgYXNzZXJ0Lm9wZXJhdG9yKDEsICc+JywgMiwgJ3RoaXMgd2lsbCBmYWlsJyk7XG4gICAqXG4gICAqIEBuYW1lIG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9wZXJhdG9yID0gZnVuY3Rpb24gKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICAgIHZhciBvaztcbiAgICBzd2l0Y2gob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJz09JzpcbiAgICAgICAgb2sgPSB2YWwgPT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc9PT0nOlxuICAgICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc+JzpcbiAgICAgICAgb2sgPSB2YWwgPiB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgb2sgPSB2YWwgPj0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgb2sgPSB2YWwgPD0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIG9rID0gdmFsICE9IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnIT09JzpcbiAgICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbXNnID0gbXNnID8gbXNnICsgJzogJyA6IG1zZztcbiAgICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgbXNnICsgJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhc3NlcnQub3BlcmF0b3JcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG9rLCBtc2csIGFzc2VydC5vcGVyYXRvciwgdHJ1ZSk7XG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIHRydWUgPT09IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAnICsgdXRpbC5pbnNwZWN0KHZhbCkgKyAnIHRvIGJlICcgKyBvcGVyYXRvciArICcgJyArIHV0aWwuaW5zcGVjdCh2YWwyKVxuICAgICAgLCAnZXhwZWN0ZWQgJyArIHV0aWwuaW5zcGVjdCh2YWwpICsgJyB0byBub3QgYmUgJyArIG9wZXJhdG9yICsgJyAnICsgdXRpbC5pbnNwZWN0KHZhbDIpICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuY2xvc2VUbyhhY3R1YWwsIGV4cGVjdGVkLCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCBgZXhwZWN0ZWRgLCB0byB3aXRoaW4gYSArLy0gYGRlbHRhYCByYW5nZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5jbG9zZVRvKDEuNSwgMSwgMC41LCAnbnVtYmVycyBhcmUgY2xvc2UnKTtcbiAgICpcbiAgICogQG5hbWUgY2xvc2VUb1xuICAgKiBAcGFyYW0ge051bWJlcn0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNsb3NlVG8gPSBmdW5jdGlvbiAoYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuY2xvc2VUbywgdHJ1ZSkudG8uYmUuY2xvc2VUbyhleHAsIGRlbHRhKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5hcHByb3hpbWF0ZWx5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmFwcHJveGltYXRlbHkoMS41LCAxLCAwLjUsICdudW1iZXJzIGFyZSBjbG9zZScpO1xuICAgKlxuICAgKiBAbmFtZSBhcHByb3hpbWF0ZWx5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhY3R1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuYXBwcm94aW1hdGVseSA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5hcHByb3hpbWF0ZWx5LCB0cnVlKVxuICAgICAgLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5zYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAzIF0sICdzYW1lIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgc2FtZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90U2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci5cbiAgICogVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyA1LCAxLCAzIF0sICdub3Qgc2FtZSBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFNhbWVNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDFcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90U2FtZU1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfV0sICdzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVEZWVwTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLlxuICAgKiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFt7IGI6IDIgfSwgeyBhOiAxIH0sIHsgZjogNSB9XSwgJ25vdCBzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lT3JkZXJlZE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAxLCAyLCAzIF0sICdzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVPcmRlcmVkTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gdGhlIHNhbWVcbiAgICogb3JkZXIuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDMgXSwgJ25vdCBzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICogVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdzYW1lIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIHNhbWVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHNldDEsIHNldDIsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGRvbid0IGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZVxuICAgKiBvcmRlci4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgejogNSB9IF0sICdub3Qgc2FtZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfSBdLCAnbm90IHNhbWUgZGVlcCBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90U2FtZURlZXBPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS4gRHVwbGljYXRlcyBhcmUgaWdub3JlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAyIF0sICdpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEluY2x1ZGVNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDUsIDEgXSwgJ25vdCBpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaW5jbHVkZS5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXMgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYSBkZWVwXG4gICAqIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXNuJ3QgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYVxuICAgKiBkZWVwIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBmOiA1IH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMSwgMiBdLCAnaW5jbHVkZSBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMSBdLCAnbm90IGluY2x1ZGUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDMgXSwgJ25vdCBpbmNsdWRlIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpc24ndCBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgZjogNSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5vbmVPZihpbkxpc3QsIGxpc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IG5vbi1vYmplY3QsIG5vbi1hcnJheSB2YWx1ZSBgaW5MaXN0YCBhcHBlYXJzIGluIHRoZSBmbGF0IGFycmF5IGBsaXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vbmVPZigxLCBbIDIsIDEgXSwgJ05vdCBmb3VuZCBpbiBsaXN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIG9uZU9mXG4gICAqIEBwYXJhbSB7Kn0gaW5MaXN0XG4gICAqIEBwYXJhbSB7QXJyYXk8Kj59IGxpc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24gKGluTGlzdCwgbGlzdCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNoYW5nZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMjIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xuICB9XG5cbiAgIC8qKlxuICAgKiAjIyMgLmNoYW5nZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDIpO1xuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXNCeSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgbXNnID0gdG1wTXNnO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKVxuICAgICAgLnRvLmNoYW5nZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gICAvKipcbiAgICogIyMjIC5kb2VzTm90Q2hhbmdlKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnZm9vJyk7IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdENoYW5nZShmbiwgb2JqLCAndmFsJyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RDaGFuZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuY2hhbmdlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvciBvZiBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCArPSAxMCB9O1xuICAgKiAgICAgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeShmbiwgb2JqLCAndmFsJywgNSk7XG4gICAqXG4gICAqIEBuYW1lIGNoYW5nZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnksIHRydWUpXG4gICAgICAudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDEzIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDEwIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RJbmNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA4IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEluY3JlYXNlKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdEluY3JlYXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNyZWFzZShvYmosIHByb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jcmVhc2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGluY3JlYXNlIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgYnkgYW4gYW1vdW50IChkZWx0YSkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDE1IH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnV0Tm90QnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZGVjcmVhc2VzKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRlY3JlYXNlcyBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgLT0gNSB9O1xuICAgKiAgICAgYXNzZXJ0LmRlY3JlYXNlc0J5KGZuLCBvYmosICd2YWwnLCA1KTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3REZWNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMTUgfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90RGVjcmVhc2UoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90RGVjcmVhc2UgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpXG4gICAgICAudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90RGVjcmVhc2VCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCdXROb3RCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkZWNyZWFzZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKiFcbiAgICogIyMjIC5pZkVycm9yKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyBpZiB2YWx1ZSBpcyBub3QgYSBmYWxzZSB2YWx1ZSwgYW5kIHRocm93cyBpZiBpdCBpcyBhIHRydWUgdmFsdWUuXG4gICAqIFRoaXMgaXMgYWRkZWQgdG8gYWxsb3cgZm9yIGNoYWkgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBOb2RlJ3NcbiAgICogYXNzZXJ0IGNsYXNzLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignSSBhbSBhIGN1c3RvbSBlcnJvcicpO1xuICAgKiAgICAgYXNzZXJ0LmlmRXJyb3IoZXJyKTsgLy8gUmV0aHJvd3MgZXJyIVxuICAgKlxuICAgKiBAbmFtZSBpZkVycm9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhyb3codmFsKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNFeHRlbnNpYmxlKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGV4dGVuc2libGUgKGNhbiBoYXZlIG5ldyBwcm9wZXJ0aWVzIGFkZGVkIHRvIGl0KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0V4dGVuc2libGUoe30pO1xuICAgKlxuICAgKiBAbmFtZSBpc0V4dGVuc2libGVcbiAgICogQGFsaWFzIGV4dGVuc2libGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiAob2JqLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RXh0ZW5zaWJsZShvYmplY3QpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBpcyBfbm90XyBleHRlbnNpYmxlLlxuICAgKlxuICAgKiAgICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgKiAgICAgdmFyIHNlYWxlZE9iamVjdCA9IE9iamVjdC5zZWFsKHt9KTtcbiAgICogICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEV4dGVuc2libGUobm9uRXh0ZW5zaWJsZU9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RXh0ZW5zaWJsZVxuICAgKiBAYWxpYXMgbm90RXh0ZW5zaWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzU2VhbGVkKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHNlYWxlZCAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSByZW1vdmVkKS5cbiAgICpcbiAgICogICAgIHZhciBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSk7XG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzU2VhbGVkKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNTZWFsZWQoZnJvemVuT2JqZWN0KTtcbiAgICpcbiAgICogQG5hbWUgaXNTZWFsZWRcbiAgICogQGFsaWFzIHNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzU2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzU2VhbGVkLCB0cnVlKS50by5iZS5zZWFsZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RTZWFsZWQob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgX25vdF8gc2VhbGVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90U2VhbGVkKHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RTZWFsZWRcbiAgICogQGFsaWFzIG5vdFNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90U2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90U2VhbGVkLCB0cnVlKS50by5ub3QuYmUuc2VhbGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZyb3plbiAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBtb2RpZmllZCkuXG4gICAqXG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAqICAgICBhc3NlcnQuZnJvemVuKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzRnJvemVuXG4gICAqIEBhbGlhcyBmcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Zyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0Zyb3plbiwgdHJ1ZSkudG8uYmUuZnJvemVuO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIF9ub3RfIGZyb3plbi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEZyb3plbih7fSk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RnJvemVuXG4gICAqIEBhbGlhcyBub3RGcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEZyb3plbiwgdHJ1ZSkudG8ubm90LmJlLmZyb3plbjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0VtcHR5KHRhcmdldClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgZG9lcyBub3QgY29udGFpbiBhbnkgdmFsdWVzLlxuICAgKiBGb3IgYXJyYXlzIGFuZCBzdHJpbmdzLCBpdCBjaGVja3MgdGhlIGBsZW5ndGhgIHByb3BlcnR5LlxuICAgKiBGb3IgYE1hcGAgYW5kIGBTZXRgIGluc3RhbmNlcywgaXQgY2hlY2tzIHRoZSBgc2l6ZWAgcHJvcGVydHkuXG4gICAqIEZvciBub24tZnVuY3Rpb24gb2JqZWN0cywgaXQgZ2V0cyB0aGUgY291bnQgb2Ygb3duXG4gICAqIGVudW1lcmFibGUgc3RyaW5nIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShbXSk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eSgnJyk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShuZXcgTWFwKTtcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNFbXB0eVxuICAgKiBAYWxpYXMgZW1wdHlcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl8U3RyaW5nfE1hcHxTZXR9IHRhcmdldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RFbXB0eSh0YXJnZXQpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGNvbnRhaW5zIHZhbHVlcy5cbiAgICogRm9yIGFycmF5cyBhbmQgc3RyaW5ncywgaXQgY2hlY2tzIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eS5cbiAgICogRm9yIGBNYXBgIGFuZCBgU2V0YCBpbnN0YW5jZXMsIGl0IGNoZWNrcyB0aGUgYHNpemVgIHByb3BlcnR5LlxuICAgKiBGb3Igbm9uLWZ1bmN0aW9uIG9iamVjdHMsIGl0IGdldHMgdGhlIGNvdW50IG9mIG93blxuICAgKiBlbnVtZXJhYmxlIHN0cmluZyBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkoWzEsIDJdKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KCczNCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkobmV3IFNldChbNSwgNl0pKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KHsga2V5OiA3IH0pO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEVtcHR5XG4gICAqIEBhbGlhcyBub3RFbXB0eVxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheXxTdHJpbmd8TWFwfFNldH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEVtcHR5LCB0cnVlKS50by5ub3QuYmUuZW1wdHk7XG4gIH07XG5cbiAgLyohXG4gICAqIEFsaWFzZXMuXG4gICAqL1xuXG4gIChmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcyl7XG4gICAgYXNzZXJ0W2FzXSA9IGFzc2VydFtuYW1lXTtcbiAgICByZXR1cm4gYWxpYXM7XG4gIH0pXG4gICgnaXNPaycsICdvaycpXG4gICgnaXNOb3RPaycsICdub3RPaycpXG4gICgndGhyb3dzJywgJ3Rocm93JylcbiAgKCd0aHJvd3MnLCAnVGhyb3cnKVxuICAoJ2lzRXh0ZW5zaWJsZScsICdleHRlbnNpYmxlJylcbiAgKCdpc05vdEV4dGVuc2libGUnLCAnbm90RXh0ZW5zaWJsZScpXG4gICgnaXNTZWFsZWQnLCAnc2VhbGVkJylcbiAgKCdpc05vdFNlYWxlZCcsICdub3RTZWFsZWQnKVxuICAoJ2lzRnJvemVuJywgJ2Zyb3plbicpXG4gICgnaXNOb3RGcm96ZW4nLCAnbm90RnJvemVuJylcbiAgKCdpc0VtcHR5JywgJ2VtcHR5JylcbiAgKCdpc05vdEVtcHR5JywgJ25vdEVtcHR5Jyk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciB1c2VkID0gW107XG5cbi8qIVxuICogQ2hhaSB2ZXJzaW9uXG4gKi9cblxuZXhwb3J0cy52ZXJzaW9uID0gJzQuMy44JztcblxuLyohXG4gKiBBc3NlcnRpb24gRXJyb3JcbiAqL1xuXG5leHBvcnRzLkFzc2VydGlvbkVycm9yID0gcmVxdWlyZSgnYXNzZXJ0aW9uLWVycm9yJyk7XG5cbi8qIVxuICogVXRpbHMgZm9yIHBsdWdpbnMgKG5vdCBleHBvcnRlZClcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vY2hhaS91dGlscycpO1xuXG4vKipcbiAqICMgLnVzZShmdW5jdGlvbilcbiAqXG4gKiBQcm92aWRlcyBhIHdheSB0byBleHRlbmQgdGhlIGludGVybmFscyBvZiBDaGFpLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAcmV0dXJucyB7dGhpc30gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG59O1xuXG4vKiFcbiAqIFV0aWxpdHkgRnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0cy51dGlsID0gdXRpbDtcblxuLyohXG4gKiBDb25maWd1cmF0aW9uXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY2hhaS9jb25maWcnKTtcbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG4vKiFcbiAqIFByaW1hcnkgYEFzc2VydGlvbmAgcHJvdG90eXBlXG4gKi9cblxudmFyIGFzc2VydGlvbiA9IHJlcXVpcmUoJy4vY2hhaS9hc3NlcnRpb24nKTtcbmV4cG9ydHMudXNlKGFzc2VydGlvbik7XG5cbi8qIVxuICogQ29yZSBBc3NlcnRpb25zXG4gKi9cblxudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NoYWkvY29yZS9hc3NlcnRpb25zJyk7XG5leHBvcnRzLnVzZShjb3JlKTtcblxuLyohXG4gKiBFeHBlY3QgaW50ZXJmYWNlXG4gKi9cblxudmFyIGV4cGVjdCA9IHJlcXVpcmUoJy4vY2hhaS9pbnRlcmZhY2UvZXhwZWN0Jyk7XG5leHBvcnRzLnVzZShleHBlY3QpO1xuXG4vKiFcbiAqIFNob3VsZCBpbnRlcmZhY2VcbiAqL1xuXG52YXIgc2hvdWxkID0gcmVxdWlyZSgnLi9jaGFpL2ludGVyZmFjZS9zaG91bGQnKTtcbmV4cG9ydHMudXNlKHNob3VsZCk7XG5cbi8qIVxuICogQXNzZXJ0IGludGVyZmFjZVxuICovXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCcuL2NoYWkvaW50ZXJmYWNlL2Fzc2VydCcpO1xuZXhwb3J0cy51c2UoYXNzZXJ0KTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2NoYWknKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmV4cG9ydCB7IHR5cGVPZiB9O1xuXG4vKipcbiAqIFRoZSBidWlsdC1pbiB0eXBlb2YgbWV0aG9kIGlzIGtub3duIHRvIGhhdmUgc29tZSBoaXN0b3JpY2FsIHdlYWtuZXNzZXMuIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcHJvdmlkZSBhIGJldHRlciBhbmQgbW9yZSBhY2N1cmF0ZSByZXN1bHQuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3R5cGVvZi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBtaXNtYXRjaFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAcGFyYW0gYXJnc1xuICovXG5mdW5jdGlvbiBleHRlbmQoLi4uYXJncykge1xuXHRsZXQgbztcblx0bGV0IGk7XG5cblx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9YCk7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGEgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKCEoaXNPYmplY3QoYSkgfHwgaXNBcnJheShhKSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhKX1gKTtcblx0XHR9XG5cblx0XHRpZiAobyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvID0gYTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgayBpbiBhKSB7XG5cdFx0XHRjb25zdCB2ID0gYT8uW2tdO1xuXG5cdFx0XHRpZiAodiA9PT0gbz8uW2tdKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKGlzT2JqZWN0KHYpICYmIHR5cGVPZih2KSA9PT0gXCJvYmplY3RcIikgfHwgaXNBcnJheSh2KSkge1xuXHRcdFx0XHRpZiAob1trXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0XHRcdG9ba10gPSBbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1trXSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodHlwZU9mKG9ba10pICE9PSB0eXBlT2YodikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0YHR5cGUgbWlzbWF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkob1trXSl9KCR7dHlwZU9mKFxuXHRcdFx0XHRcdFx0XHRcdG9ba10sXG5cdFx0XHRcdFx0XHRcdCl9KSAhPSAke0pTT04uc3RyaW5naWZ5KHYpfSgke3R5cGVPZih2KX0pYCxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob1trXSkpIHtcblx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0b1trXS5wdXNoKC4uLnYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1trXSA9IGV4dGVuZChvW2tdLCB2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG8pKSB7XG5cdFx0XHRcdFx0by5wdXNoKHYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9ba10gPSB2O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvO1xufVxuIiwgIi8vIGh0dHA6Ly93d3cucmFqZGVlcGQuY29tL2FydGljbGVzL2Nocm9tZS9sb2NhbHN0cmcvTG9jYWxTdG9yYWdlU2FtcGxlLmh0bVxuXG4vLyBOT1RFOlxuLy8gdGhpcyB2YXJpZXMgZnJvbSBhY3R1YWwgbG9jYWxTdG9yYWdlIGluIHNvbWUgc3VidGxlIHdheXNcblxuLy8gYWxzbywgdGhlcmUgaXMgbm8gcGVyc2lzdGVuY2Vcbi8vIFRPRE8gcGVyc2lzdFxuKGZ1bmN0aW9uICgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmdW5jdGlvbiBTdG9yYWdlKHBhdGgsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZGI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfYmtfX18nLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfc3RyaWN0X19fJywge1xuICAgICAgdmFsdWU6ICEhb3B0cy5zdHJpY3RcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl93c19fXycsIHtcbiAgICAgIHZhbHVlOiBvcHRzLndzIHx8ICcgICdcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBkYiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRiID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpc1trZXldID0gZGJba2V5XTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmdldEl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpc1trZXldID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgIHRoaXNba2V5XSA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWw7XG4gICAgfVxuICAgIHRoaXMuX19fc2F2ZV9fXygpO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gZmlsdGVycyBvdXQgcHJvdG90eXBlIGtleXNcbiAgICBPYmplY3Qua2V5cyhzZWxmKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHNlbGZba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG4gICAgfSk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpID0gaSB8fCAwO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKVtpXTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKS5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5fX19zYXZlX19fID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICghdGhpcy5fX19wcml2X2JrX19fLnBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fX19wcml2X2JrX19fLmxvY2spIHtcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy53YWl0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9fX3ByaXZfYmtfX18ubG9jayA9IHRydWU7XG4gICAgZnMud3JpdGVGaWxlKFxuICAgICAgdGhpcy5fX19wcml2X2JrX19fLnBhdGhcbiAgICAsIEpTT04uc3RyaW5naWZ5KHRoaXMsIG51bGwsIHRoaXMuX19fcHJpdl93c19fXylcbiAgICAsICd1dGY4J1xuICAgICwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHNlbGYuX19fcHJpdl9ia19fXy5sb2NrID0gZmFsc2U7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgd3JpdGUgdG8gZGF0YWJhc2UnLCBzZWxmLl9fX3ByaXZfYmtfX18ucGF0aCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCkge1xuICAgICAgICBzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCA9IGZhbHNlO1xuICAgICAgICBzZWxmLl9fX3NhdmVfX18oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZSwgJ2NyZWF0ZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHBhdGgsIG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShwYXRoLCBvcHRzKTtcbiAgICB9XG4gICwgd3JpdGFibGU6IGZhbHNlXG4gICwgZW51bWVyYWJsZTogZmFsc2VcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBTdG9yYWdlO1xufSgpKTtcbiIsICIoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCByZWZNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBoaWRkZW5JbnB1dE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaW50ZXJuYWxzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybXNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd0hvc3RzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHJlZlZhbHVlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB1cGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dSb290TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQW5jaG9yTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBkb2N1bWVudEZyYWdtZW50TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFja01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlVcGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IGFvbSA9IHtcbiAgICAgICAgYXJpYUF0b21pYzogJ2FyaWEtYXRvbWljJyxcbiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogJ2FyaWEtYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgYXJpYUJ1c3k6ICdhcmlhLWJ1c3knLFxuICAgICAgICBhcmlhQ2hlY2tlZDogJ2FyaWEtY2hlY2tlZCcsXG4gICAgICAgIGFyaWFDb2xDb3VudDogJ2FyaWEtY29sY291bnQnLFxuICAgICAgICBhcmlhQ29sSW5kZXg6ICdhcmlhLWNvbGluZGV4JyxcbiAgICAgICAgYXJpYUNvbEluZGV4VGV4dDogJ2FyaWEtY29saW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYUNvbFNwYW46ICdhcmlhLWNvbHNwYW4nLFxuICAgICAgICBhcmlhQ3VycmVudDogJ2FyaWEtY3VycmVudCcsXG4gICAgICAgIGFyaWFEaXNhYmxlZDogJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgICBhcmlhRXhwYW5kZWQ6ICdhcmlhLWV4cGFuZGVkJyxcbiAgICAgICAgYXJpYUhhc1BvcHVwOiAnYXJpYS1oYXNwb3B1cCcsXG4gICAgICAgIGFyaWFIaWRkZW46ICdhcmlhLWhpZGRlbicsXG4gICAgICAgIGFyaWFJbnZhbGlkOiAnYXJpYS1pbnZhbGlkJyxcbiAgICAgICAgYXJpYUtleVNob3J0Y3V0czogJ2FyaWEta2V5c2hvcnRjdXRzJyxcbiAgICAgICAgYXJpYUxhYmVsOiAnYXJpYS1sYWJlbCcsXG4gICAgICAgIGFyaWFMZXZlbDogJ2FyaWEtbGV2ZWwnLFxuICAgICAgICBhcmlhTGl2ZTogJ2FyaWEtbGl2ZScsXG4gICAgICAgIGFyaWFNb2RhbDogJ2FyaWEtbW9kYWwnLFxuICAgICAgICBhcmlhTXVsdGlMaW5lOiAnYXJpYS1tdWx0aWxpbmUnLFxuICAgICAgICBhcmlhTXVsdGlTZWxlY3RhYmxlOiAnYXJpYS1tdWx0aXNlbGVjdGFibGUnLFxuICAgICAgICBhcmlhT3JpZW50YXRpb246ICdhcmlhLW9yaWVudGF0aW9uJyxcbiAgICAgICAgYXJpYVBsYWNlaG9sZGVyOiAnYXJpYS1wbGFjZWhvbGRlcicsXG4gICAgICAgIGFyaWFQb3NJblNldDogJ2FyaWEtcG9zaW5zZXQnLFxuICAgICAgICBhcmlhUHJlc3NlZDogJ2FyaWEtcHJlc3NlZCcsXG4gICAgICAgIGFyaWFSZWFkT25seTogJ2FyaWEtcmVhZG9ubHknLFxuICAgICAgICBhcmlhUmVsZXZhbnQ6ICdhcmlhLXJlbGV2YW50JyxcbiAgICAgICAgYXJpYVJlcXVpcmVkOiAnYXJpYS1yZXF1aXJlZCcsXG4gICAgICAgIGFyaWFSb2xlRGVzY3JpcHRpb246ICdhcmlhLXJvbGVkZXNjcmlwdGlvbicsXG4gICAgICAgIGFyaWFSb3dDb3VudDogJ2FyaWEtcm93Y291bnQnLFxuICAgICAgICBhcmlhUm93SW5kZXg6ICdhcmlhLXJvd2luZGV4JyxcbiAgICAgICAgYXJpYVJvd0luZGV4VGV4dDogJ2FyaWEtcm93aW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYVJvd1NwYW46ICdhcmlhLXJvd3NwYW4nLFxuICAgICAgICBhcmlhU2VsZWN0ZWQ6ICdhcmlhLXNlbGVjdGVkJyxcbiAgICAgICAgYXJpYVNldFNpemU6ICdhcmlhLXNldHNpemUnLFxuICAgICAgICBhcmlhU29ydDogJ2FyaWEtc29ydCcsXG4gICAgICAgIGFyaWFWYWx1ZU1heDogJ2FyaWEtdmFsdWVtYXgnLFxuICAgICAgICBhcmlhVmFsdWVNaW46ICdhcmlhLXZhbHVlbWluJyxcbiAgICAgICAgYXJpYVZhbHVlTm93OiAnYXJpYS12YWx1ZW5vdycsXG4gICAgICAgIGFyaWFWYWx1ZVRleHQ6ICdhcmlhLXZhbHVldGV4dCcsXG4gICAgICAgIHJvbGU6ICdyb2xlJ1xuICAgIH07XG4gICAgY29uc3QgaW5pdEFvbSA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gYW9tKSB7XG4gICAgICAgICAgICBpbnRlcm5hbHNba2V5XSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY2xvc3VyZVZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhb21ba2V5XTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnRlcm5hbHMsIGtleSwge1xuICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3N1cmVWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zdXJlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlTWFwLnNldChyZWYsIGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpbml0Tm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgIGNvbnN0IHsgZm9ybSB9ID0gaW50ZXJuYWxzO1xuICAgICAgICBpbml0Rm9ybShub2RlLCBmb3JtLCBpbnRlcm5hbHMpO1xuICAgICAgICBpbml0TGFiZWxzKG5vZGUsIGludGVybmFscy5sYWJlbHMpO1xuICAgIH1cbiAgICBjb25zdCB3YWxrRmllbGRzZXQgPSAobm9kZSwgZmlyc3RSZW5kZXIgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG5vZGUsIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULCB7XG4gICAgICAgICAgICBhY2NlcHROb2RlKG5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzTWFwLmhhcyhub2RlKSA/XG4gICAgICAgICAgICAgICAgICAgIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICBjb25zdCBpc0NhbGxOZWNlc3NhcnkgPSAoIWZpcnN0UmVuZGVyIHx8IG5vZGUuZGlzYWJsZWQpO1xuICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuZm9ybURpc2FibGVkQ2FsbGJhY2sgJiYgaXNDYWxsTmVjZXNzYXJ5KSB7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoY3VycmVudCwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydkaXNhYmxlZCcsICduYW1lJ10gfTtcbiAgICBjb25zdCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyID0gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQodGFyZ2V0LCB0YXJnZXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0LmxvY2FsTmFtZSA9PT0gJ2ZpZWxkc2V0Jykge1xuICAgICAgICAgICAgICAgICAgICB3YWxrRmllbGRzZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVmVmFsdWVNYXAuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFscy5zZXRGb3JtVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pIDoge307XG4gICAgZnVuY3Rpb24gb2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb25SZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uUmVjb3JkO1xuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSBBcnJheS5mcm9tKGFkZGVkTm9kZXMpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IEFycmF5LmZyb20ocmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgIGFkZGVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZT8uKG5vZGUsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB3YWxrRmllbGRzZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzICYmIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbklucHV0cyhpbnRlcm5hbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hhZG93SG9zdHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gc2hhZG93SG9zdHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmcmFnbWVudE9ic2VydmVyQ2FsbGJhY2sobXV0YXRpb25MaXN0KSB7XG4gICAgICAgIG11dGF0aW9uTGlzdC5mb3JFYWNoKG11dGF0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZE5vZGVzIH0gPSBtdXRhdGlvbjtcbiAgICAgICAgICAgIHJlbW92ZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gZG9jdW1lbnRGcmFnbWVudE1hcC5nZXQobXV0YXRpb24udGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB1cGdyYWRlSW50ZXJuYWxzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyVXBncmFkZSA9IChmcmFnbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgIGlmICh3aW5kb3c/LlNoYWR5RE9NPy5pblVzZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQubW9kZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQuaG9zdCkge1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmU/LihmcmFnbWVudCwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgICAgIGRvY3VtZW50RnJhZ21lbnRNYXAuc2V0KGZyYWdtZW50LCBvYnNlcnZlcik7XG4gICAgfTtcbiAgICBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKSA6IHt9O1xuICAgIGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0RGlzYWJsZWQgPSAocmVmLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWYucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgcmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Rpc2FibGVkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUhpZGRlbklucHV0cyA9IChpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZGVuSW5wdXRzID0gaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscyk7XG4gICAgICAgIGhpZGRlbklucHV0cy5mb3JFYWNoKGhpZGRlbklucHV0ID0+IHtcbiAgICAgICAgICAgIGhpZGRlbklucHV0LnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlSGlkZGVuSW5wdXQgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGlucHV0Lm5hbWUgPSByZWYuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHJlZi5hZnRlcihpbnB1dCk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpLnB1c2goaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICBjb25zdCBpbml0UmVmID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlPy4ocmVmLCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnKTtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMYWJlbHMgPSAocmVmLCBsYWJlbHMpID0+IHtcbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIEFycmF5LmZyb20obGFiZWxzKS5mb3JFYWNoKGxhYmVsID0+IGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVmLmNsaWNrLmJpbmQocmVmKSkpO1xuICAgICAgICAgICAgbGV0IGZpcnN0TGFiZWxJZCA9IGxhYmVsc1swXS5pZDtcbiAgICAgICAgICAgIGlmICghbGFiZWxzWzBdLmlkKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RMYWJlbElkID0gYCR7bGFiZWxzWzBdLmh0bWxGb3J9X0xhYmVsYDtcbiAgICAgICAgICAgICAgICBsYWJlbHNbMF0uaWQgPSBmaXJzdExhYmVsSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBmaXJzdExhYmVsSWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRGb3JtVmFsaWRpdHkgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBuYXRpdmVDb250cm9sVmFsaWRpdHkgPSBBcnJheS5mcm9tKGZvcm0uZWxlbWVudHMpXG4gICAgICAgICAgICAuZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudC50YWdOYW1lLmluY2x1ZGVzKCctJykgJiYgZWxlbWVudC52YWxpZGl0eSlcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsaWRpdHkudmFsaWQpO1xuICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pIHx8IFtdO1xuICAgICAgICBjb25zdCBwb2x5ZmlsbGVkVmFsaWRpdHkgPSBBcnJheS5mcm9tKHBvbHlmaWxsZWRFbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmlzQ29ubmVjdGVkKVxuICAgICAgICAgICAgLm1hcCgoY29udHJvbCkgPT4gaW50ZXJuYWxzTWFwLmdldChjb250cm9sKS52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IGhhc0ludmFsaWQgPSBbLi4ubmF0aXZlQ29udHJvbFZhbGlkaXR5LCAuLi5wb2x5ZmlsbGVkVmFsaWRpdHldLmluY2x1ZGVzKGZhbHNlKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgaGFzSW52YWxpZCk7XG4gICAgICAgIGZvcm0udG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCAhaGFzSW52YWxpZCk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtSW5wdXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtQ2hhbmdlQ2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZpbmRQYXJlbnRGb3JtKGV2ZW50LnRhcmdldCkpO1xuICAgIH07XG4gICAgY29uc3Qgd2lyZVN1Ym1pdExvZ2ljID0gKGZvcm0pID0+IHtcbiAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9uU2VsZWN0b3IgPSBbJ2J1dHRvblt0eXBlPXN1Ym1pdF0nLCAnaW5wdXRbdHlwZT1zdWJtaXRdJywgJ2J1dHRvbjpub3QoW3R5cGVdKSddXG4gICAgICAgICAgICAubWFwKHNlbCA9PiBgJHtzZWx9Om5vdChbZGlzYWJsZWRdKWApXG4gICAgICAgICAgICAubWFwKHNlbCA9PiBgJHtzZWx9Om5vdChbZm9ybV0pJHtmb3JtLmlkID8gYCwke3NlbH1bZm9ybT0nJHtmb3JtLmlkfSddYCA6ICcnfWApXG4gICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KHN1Ym1pdEJ1dHRvblNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybS5ub1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlMaXN0ID0gbm9kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkaXR5TGlzdC5pbmNsdWRlcyhmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZm9ybVJlc2V0Q2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkICYmIGVsZW1lbnQuZm9ybVJlc2V0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjay5hcHBseShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaW5pdEZvcm0gPSAocmVmLCBmb3JtLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzLmFkZChyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5pdFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBpbml0U2V0LmFkZChyZWYpO1xuICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50c01hcC5zZXQoZm9ybSwgaW5pdFNldCk7XG4gICAgICAgICAgICAgICAgd2lyZVN1Ym1pdExvZ2ljKGZvcm0pO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigncmVzZXQnLCBmb3JtUmVzZXRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZvcm1JbnB1dENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZvcm1DaGFuZ2VDYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3Jtc01hcC5zZXQoZm9ybSwgeyByZWYsIGludGVybmFscyB9KTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgcmVmLmZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2suYXBwbHkocmVmLCBbZm9ybV0pO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGFyZW50Rm9ybSA9IChlbGVtKSA9PiB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUgIT09ICdGT1JNJykge1xuICAgICAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEZvcm0ocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkID0gKHJlZiwgbWVzc2FnZSwgRXJyb3JUeXBlID0gRE9NRXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICghcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3JUeXBlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvdmVycmlkZUZvcm1NZXRob2QgPSAoZm9ybSwgcmV0dXJuVmFsdWUsIG1ldGhvZCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBpbnRlcm5hbHNbbWV0aG9kXSgpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCB1cGdyYWRlSW50ZXJuYWxzID0gKHJlZikgPT4ge1xuICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KHJlZik7XG4gICAgICAgICAgICBjb25zdCB7IGxhYmVscywgZm9ybSB9ID0gaW50ZXJuYWxzO1xuICAgICAgICAgICAgaW5pdExhYmVscyhyZWYsIGxhYmVscyk7XG4gICAgICAgICAgICBpbml0Rm9ybShyZWYsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsaWRpdHlTdGF0ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5iYWRJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VPdmVyZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZVVuZGVyZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGVwTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9vTG9uZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29TaG9ydCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50eXBlTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZU1pc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNldFZhbGlkID0gKHZhbGlkaXR5T2JqZWN0KSA9PiB7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50b29Mb25nID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IHRydWU7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdmFsaWRpdHlPYmplY3Q7XG4gICAgfTtcbiAgICBjb25zdCByZWNvbmNpbGVWYWxpZGl0eSA9ICh2YWxpZGl0eU9iamVjdCwgbmV3U3RhdGUsIGZvcm0pID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsaWQgPSBpc1ZhbGlkKG5ld1N0YXRlKTtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3U3RhdGUpLmZvckVhY2goa2V5ID0+IHZhbGlkaXR5T2JqZWN0W2tleV0gPSBuZXdTdGF0ZVtrZXldKTtcbiAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgIHNldEZvcm1WYWxpZGl0eShmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWRpdHlPYmplY3Q7XG4gICAgfTtcbiAgICBjb25zdCBpc1ZhbGlkID0gKHZhbGlkaXR5U3RhdGUpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHZhbGlkaXR5U3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICd2YWxpZCcgJiYgdmFsaWRpdHlTdGF0ZVtrZXldICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21TdGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgZnVuY3Rpb24gYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpIHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShzdGF0ZU5hbWUsIHRydWUpO1xuICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgIHJlZi5wYXJ0LmFkZChzdGF0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIEN1c3RvbVN0YXRlU2V0IGV4dGVuZHMgU2V0IHtcbiAgICAgICAgc3RhdGljIGdldCBpc1BvbHlmaWxsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihyZWYpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICBpZiAoIXJlZiB8fCAhcmVmLnRhZ05hbWUgfHwgcmVmLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1c3RvbVN0YXRlTWFwLnNldCh0aGlzLCByZWYpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKCEvXi0tLy50ZXN0KHN0YXRlKSB8fCB0eXBlb2Ygc3RhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkZCcgb24gJ0N1c3RvbVN0YXRlU2V0JzogVGhlIHNwZWNpZmllZCB2YWx1ZSAke3N0YXRlfSBtdXN0IHN0YXJ0IHdpdGggJy0tJy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmFkZChzdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjdXN0b21TdGF0ZU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZU5hbWUgPSBgc3RhdGUke3N0YXRlfWA7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXIoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBbZW50cnldIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGUoZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VwZXIuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUoc3RhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjdXN0b21TdGF0ZU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnBhcnQucmVtb3ZlKGBzdGF0ZSR7c3RhdGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlJHtzdGF0ZX1gLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnBhcnQucmVtb3ZlKGBzdGF0ZSR7c3RhdGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHM7XG4gICAgY2xhc3MgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50cykge1xuICAgICAgICAgICAgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIGVsZW1lbnRzLCBcImZcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2VsZW1lbnQuZ2V0QXR0cmlidXRlKCduYW1lJyldID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIFwiZlwiKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgWyhfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtKGkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW2ldID09IG51bGwgPyBudWxsIDogdGhpc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lZEl0ZW0obmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbbmFtZV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF0Y2hGb3JtUHJvdG90eXBlKCkge1xuICAgICAgICBjb25zdCBjaGVja1ZhbGlkaXR5ID0gSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5jaGVja1ZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHkgPSBjaGVja1ZhbGlkaXR5T3ZlcnJpZGU7XG4gICAgICAgIGNvbnN0IHJlcG9ydFZhbGlkaXR5ID0gSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5yZXBvcnRWYWxpZGl0eTtcbiAgICAgICAgSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5yZXBvcnRWYWxpZGl0eSA9IHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGU7XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmFsaWRpdHlPdmVycmlkZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBjaGVja1ZhbGlkaXR5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlRm9ybU1ldGhvZCh0aGlzLCByZXR1cm5WYWx1ZSwgJ2NoZWNrVmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXBvcnRWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHJlcG9ydFZhbGlkaXR5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlRm9ybU1ldGhvZCh0aGlzLCByZXR1cm5WYWx1ZSwgJ3JlcG9ydFZhbGlkaXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBnZXQgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgJ2VsZW1lbnRzJyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnLCB7XG4gICAgICAgICAgICBnZXQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0LmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seWZpbGxlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShmb3JtRWxlbWVudHNNYXAuZ2V0KHRoaXMpIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWZpbGxlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyZWRFbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudHMpLmNvbmNhdChwb2x5ZmlsbGVkRWxlbWVudHMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgMiA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKG9yZGVyZWRFbGVtZW50cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzIHtcbiAgICAgICAgc3RhdGljIGdldCBpc1BvbHlmaWxsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihyZWYpIHtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSByZWYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gbmV3IFZhbGlkaXR5U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzID0gbmV3IEN1c3RvbVN0YXRlU2V0KHJlZik7XG4gICAgICAgICAgICByZWZNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgICAgICB2YWxpZGl0eU1hcC5zZXQodGhpcywgdmFsaWRpdHkpO1xuICAgICAgICAgICAgaW50ZXJuYWxzTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgaW5pdEFvbShyZWYsIHRoaXMpO1xuICAgICAgICAgICAgaW5pdFJlZihyZWYsIHRoaXMpO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgICAgICBpZiAocm9vdE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgZGVmZXJVcGdyYWRlKHJvb3ROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaGVja1ZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnY2hlY2tWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkaXR5LnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlFdmVudCA9IG5ldyBFdmVudCgnaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5kaXNwYXRjaEV2ZW50KHZhbGlkaXR5RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkaXR5LnZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmb3JtKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ2Zvcm0nIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgbGV0IGZvcm07XG4gICAgICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGZpbmRQYXJlbnRGb3JtKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWxzKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ2xhYmVscycgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHJlZi5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgICBjb25zdCBob3N0Um9vdCA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgaWYgKGhvc3RSb290ICYmIGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvc3RSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmb3I9XCIke2lkfVwiXWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlcG9ydFZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAncmVwb3J0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy53aWxsVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy5jaGVja1ZhbGlkaXR5KCk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB2YWxpZGF0aW9uQW5jaG9yTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChhbmNob3IgJiYgIXJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiBhbmNob3IpIHtcbiAgICAgICAgICAgICAgICByZWYuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBzZXRGb3JtVmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEZvcm1WYWx1ZScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWYuZ2V0QXR0cmlidXRlKCduYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIEFycmF5LmZyb20odmFsdWUpLnJldmVyc2UoKS5mb3JFYWNoKChbZm9ybURhdGFLZXksIGZvcm1EYXRhVmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybURhdGFWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbklucHV0ID0gY3JlYXRlSGlkZGVuSW5wdXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0Lm5hbWUgPSBmb3JtRGF0YUtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gZm9ybURhdGFWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmVmFsdWVNYXAuc2V0KHJlZiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFZhbGlkaXR5KHZhbGlkaXR5Q2hhbmdlcywgdmFsaWRhdGlvbk1lc3NhZ2UsIGFuY2hvcikge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHlDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIGV4ZWN1dGUgXFwnc2V0VmFsaWRpdHlcXCcgb24gXFwnRWxlbWVudEludGVybmFsc1xcJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuY2hvck1hcC5zZXQodGhpcywgYW5jaG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHlDaGFuZ2VzT2JqID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGl0eUNoYW5nZXNPYmpba2V5XSA9IHZhbGlkaXR5Q2hhbmdlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbGlkaXR5Q2hhbmdlc09iaikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWQodmFsaWRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hlY2sgPSB7IC4uLnZhbGlkaXR5LCAuLi52YWxpZGl0eUNoYW5nZXNPYmogfTtcbiAgICAgICAgICAgIGRlbGV0ZSBjaGVjay52YWxpZDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQgfSA9IHJlY29uY2lsZVZhbGlkaXR5KHZhbGlkaXR5LCBjaGVjaywgdGhpcy5mb3JtKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQgJiYgIXZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eSBpZiBvbmUgb3IgbW9yZSBmbGFncyBpbiB0aGUgZmlyc3QgYXJndW1lbnQgYXJlIHRydWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZU1hcC5zZXQodGhpcywgdmFsaWQgPyAnJyA6IHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICF2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgdmFsaWQpO1xuICAgICAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIGAkeyF2YWxpZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5zZXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgc2hhZG93Um9vdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gc2hhZG93Um9vdE1hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAndmFsaWRhdGlvbk1lc3NhZ2UnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAndmFsaWRpdHknIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHdpbGxWYWxpZGF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd3aWxsVmFsaWRhdGUnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKChyZWYuZGlzYWJsZWQgfHwgcmVmLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkgfHxcbiAgICAgICAgICAgICAgICByZWYuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFbGVtZW50SW50ZXJuYWxzU3VwcG9ydGVkKCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5FbGVtZW50SW50ZXJuYWxzIHx8ICFIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3MgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24gZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxzID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5kb21OYW1lID0gYGVsZW1lbnQtaW50ZXJuYWxzLWZlYXR1cmUtZGV0ZWN0aW9uLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJyl9YDtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHJhbmRvbU5hbWUsIEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uKTtcbiAgICAgICAgY29uc3QgZmVhdHVyZURldGVjdGlvbkVsZW1lbnQgPSBuZXcgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24oKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdzaGFkb3dSb290JyxcbiAgICAgICAgICAgICdmb3JtJyxcbiAgICAgICAgICAgICd3aWxsVmFsaWRhdGUnLFxuICAgICAgICAgICAgJ3ZhbGlkaXR5JyxcbiAgICAgICAgICAgICd2YWxpZGF0aW9uTWVzc2FnZScsXG4gICAgICAgICAgICAnbGFiZWxzJyxcbiAgICAgICAgICAgICdzZXRGb3JtVmFsdWUnLFxuICAgICAgICAgICAgJ3NldFZhbGlkaXR5JyxcbiAgICAgICAgICAgICdjaGVja1ZhbGlkaXR5JyxcbiAgICAgICAgICAgICdyZXBvcnRWYWxpZGl0eSdcbiAgICAgICAgXS5ldmVyeShwcm9wID0+IHByb3AgaW4gZmVhdHVyZURldGVjdGlvbkVsZW1lbnQuaW50ZXJuYWxzKTtcbiAgICB9XG4gICAgbGV0IGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgbGV0IGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgaWYgKGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0N1c3RvbVN0YXRlU2V0UG9seWZpbGxCZWVuQXBwbGllZCA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5DdXN0b21TdGF0ZVNldCA9IEN1c3RvbVN0YXRlU2V0O1xuICAgICAgICBpZiAoYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBhdHRhY2hJbnRlcm5hbHMuY2FsbCh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc3RhdGVzID0gbmV3IEN1c3RvbVN0YXRlU2V0KHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsKGZvcmNlQ3VzdG9tU3RhdGVTZXQgPSB0cnVlKSB7XG4gICAgICAgIGlmIChoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuRWxlbWVudEludGVybmFscyA9IEVsZW1lbnRJbnRlcm5hbHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBDdXN0b21FbGVtZW50UmVnaXN0cnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbmUgPSBDdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmRlZmluZTtcbiAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGNvbnN0cnVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RlZENhbGxiYWNrID0gY29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3RlZENhbGxiYWNrTWFwLmhhcyh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrTWFwLnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZENhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRDYWxsYmFjay5hcHBseSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmluZS5jYWxsKHRoaXMsIG5hbWUsIGNvbnN0cnVjdG9yLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICdhdHRhY2hJbnRlcm5hbHMnIG9uICdIVE1MRWxlbWVudCc6IFVuYWJsZSB0byBhdHRhY2ggRWxlbWVudEludGVybmFscyB0byBub24tY3VzdG9tIGVsZW1lbnRzLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBET01FeGNlcHRpb246IEZhaWxlZCB0byBleGVjdXRlICdhdHRhY2hJbnRlcm5hbHMnIG9uICdIVE1MRWxlbWVudCc6IEVsZW1lbnRJbnRlcm5hbHMgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB3YXMgYWxyZWFkeSBhdHRhY2hlZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50SW50ZXJuYWxzKHRoaXMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2hTaGFkb3dPYnNlcnZlciguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGF0dGFjaFNoYWRvdy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dSb290TWFwLnNldCh0aGlzLCBzaGFkb3dSb290KTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlckV4aXN0cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzaGFkb3dSb290LCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2hhZG93SG9zdHNNYXAuc2V0KHRoaXMsIG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hTaGFkb3cgPSBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3c7XG4gICAgICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cgPSBhdHRhY2hTaGFkb3dPYnNlcnZlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlckV4aXN0cygpICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgIGRvY3VtZW50T2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBhdGNoRm9ybVByb3RvdHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZUN1c3RvbVN0YXRlU2V0IHx8XG4gICAgICAgICAgICAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSkge1xuICAgICAgICAgICAgZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0NlUG9seWZpbGwgPSAhIWN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s7XG4gICAgaWYgKCFpc0NlUG9seWZpbGwpIHtcbiAgICAgICAgaWYgKCFpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkge1xuICAgICAgICAgICAgZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0cy5mb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwgPSBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGw7XG4gICAgZXhwb3J0cy5mb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbCA9IGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHJldHVybiBleHBvcnRzO1xuXG59KSh7fSk7XG4iLCAiLyohXG4gKiBNSVQgTGljZW5zZVxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBQZWN1bGlhciBWZW50dXJlcywgTExDXG4gKiBcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqIFxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQVJSQVlfQlVGRkVSX05BTUUgPSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI7XG5jbGFzcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gQVJSQVlfQlVGRkVSX05BTUU7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgPT09IDAgJiYgZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGRhdGEuYnVmZmVyKVxuICAgICAgICAgICAgLnNsaWNlKGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvVWludDhBcnJheShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhkYXRhLCBVaW50OEFycmF5KTtcbiAgICB9XG4gICAgc3RhdGljIHRvVmlldyhkYXRhLCB0eXBlKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQnVmZmVyU291cmNlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgKGRhdGEgJiYgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEuYnVmZmVyKSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0VxdWFsKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYVZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGEpO1xuICAgICAgICBjb25zdCBiVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYik7XG4gICAgICAgIGlmIChhVmlldy5sZW5ndGggIT09IGJWaWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFWaWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVZpZXdbaV0gIT09IGJWaWV3W2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgY29uY2F0KC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGJ1ZmZlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmICEoYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiBhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3Muc2xpY2UoMCwgYXJncy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgc2l6ZSArPSBidWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgcmVzLnNldCh2aWV3LCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KHJlcywgYXJnc1thcmdzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNvbnN0IFNUUklOR19UWVBFID0gXCJzdHJpbmdcIjtcbmNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZl0rJC9pO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuY29uc3QgQkFTRTY0VVJMX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xuY2xhc3MgVXRmOENvbnZlcnRlciB7XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICBjb25zdCBzID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKTtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHVpbnRBcnJheVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWludEFycmF5LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCBlbmNvZGVkU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVuY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGVuY29kZWRTdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZWRTdHJpbmc7XG4gICAgfVxufVxuY2xhc3MgVXRmMTZDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBkYXRhVmlldy5nZXRVaW50MTYoaSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheUJ1ZmZlcih0ZXh0Lmxlbmd0aCAqIDIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhyZXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihpICogMiwgdGV4dC5jaGFyQ29kZUF0KGkpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuY2xhc3MgQ29udmVydCB7XG4gICAgc3RhdGljIGlzSGV4KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgSEVYX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRVUkxfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIFRvU3RyaW5nKGJ1ZmZlciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvVXRmOFN0cmluZyhidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9IZXgoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0VXJsKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tU3RyaW5nKHN0ciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tVXRmOFN0cmluZyhzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tSGV4KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjRVcmwoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeSA9IHRoaXMuVG9TdHJpbmcoYnVmLCBcImJpbmFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiBidG9hKGJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NChiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0KTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0VGV4dCcgaXMgbm90IEJhc2U2NCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXRvYiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShhdG9iKGZvcm1hdHRlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGZvcm1hdHRlZCwgXCJiYXNlNjRcIikpLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NFVybChiYXNlNjR1cmwpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0dXJsKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0VXJsKGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0dXJsJyBpcyBub3QgQmFzZTY0VXJsIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NCh0aGlzLkJhc2U2NFBhZGRpbmcoZm9ybWF0dGVkLnJlcGxhY2UoL1xcLS9nLCBcIitcIikucmVwbGFjZSgvXFxfL2csIFwiL1wiKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChkYXRhKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvXFw9L2csIFwiXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjhTdHJpbmcodGV4dCwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9VdGY4U3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJpbmFyeSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyaW5nTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Vmlldy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb0JpbmFyeShidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIFRvSGV4KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gYnVmW2ldO1xuICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBieXRlLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbUhleChoZXhTdHJpbmcpIHtcbiAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGhleFN0cmluZyk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0hleChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2hleFN0cmluZycgaXMgbm90IEhFWCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoICUgMikge1xuICAgICAgICAgICAgZm9ybWF0dGVkID0gYDAke2Zvcm1hdHRlZH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGZvcm1hdHRlZC5sZW5ndGggLyAyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBmb3JtYXR0ZWQuc2xpY2UoaSwgaSArIDIpO1xuICAgICAgICAgICAgcmVzW2kgLyAyXSA9IHBhcnNlSW50KGMsIDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvVXRmMTZTdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjE2U3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBCYXNlNjRQYWRkaW5nKGJhc2U2NCkge1xuICAgICAgICBjb25zdCBwYWRDb3VudCA9IDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpO1xuICAgICAgICBpZiAocGFkQ291bnQgPCA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gXCI9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U2NDtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhkYXRhKSB7XG4gICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnJlcGxhY2UoL1tcXG5cXHJcXHQgXS9nLCBcIlwiKSkgfHwgXCJcIjtcbiAgICB9XG59XG5Db252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgY29uc3QgcmVzID0gYXJndW1lbnRzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgcmVzW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb21iaW5lKC4uLmJ1Zikge1xuICAgIGNvbnN0IHRvdGFsQnl0ZUxlbmd0aCA9IGJ1Zi5tYXAoKGl0ZW0pID0+IGl0ZW0uYnl0ZUxlbmd0aCkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRvdGFsQnl0ZUxlbmd0aCk7XG4gICAgbGV0IGN1cnJlbnRQb3MgPSAwO1xuICAgIGJ1Zi5tYXAoKGl0ZW0pID0+IG5ldyBVaW50OEFycmF5KGl0ZW0pKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtMiBvZiBhcnIpIHtcbiAgICAgICAgICAgIHJlc1tjdXJyZW50UG9zKytdID0gaXRlbTI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIGlzRXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuQnVmZmVyU291cmNlQ29udmVydGVyID0gQnVmZmVyU291cmNlQ29udmVydGVyO1xuZXhwb3J0cy5Db252ZXJ0ID0gQ29udmVydDtcbmV4cG9ydHMuYXNzaWduID0gYXNzaWduO1xuZXhwb3J0cy5jb21iaW5lID0gY29tYmluZTtcbmV4cG9ydHMuaXNFcXVhbCA9IGlzRXF1YWw7XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5mdW5jdGlvbiBnZXRVVENEYXRlKGRhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnNWYWx1ZShwYXJhbWV0ZXJzLCBuYW1lLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGlmICgocGFyYW1ldGVycyBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoX2EgPSBwYXJhbWV0ZXJzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gYnVmZmVyVG9IZXhDb2RlcyhpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQpLCBpbnNlcnRTcGFjZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAobmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gaXRlbS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCArPSBzdHI7XHJcbiAgICAgICAgaWYgKGluc2VydFNwYWNlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgXFxcIkFycmF5QnVmZmVyXFxcIlwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEZyb21CYXNlKGlucHV0QnVmZmVyLCBpbnB1dEJhc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgaWYgKGlucHV0QnVmZmVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dEJ1ZmZlclswXTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGlucHV0QnVmZmVyWyhpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKSAtIGldICogTWF0aC5wb3coMiwgaW5wdXRCYXNlICogaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxUb0Jhc2UodmFsdWUsIGJhc2UsIHJlc2VydmVkID0gKC0xKSkge1xyXG4gICAgY29uc3QgaW50ZXJuYWxSZXNlcnZlZCA9IHJlc2VydmVkO1xyXG4gICAgbGV0IGludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgbGV0IGJpZ2dlc3QgPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgYmlnZ2VzdCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaW50ZXJuYWxSZXNlcnZlZCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnRlcm5hbFJlc2VydmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lzID0gTWF0aC5wb3coMiwgaiAqIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0gPSBNYXRoLmZsb29yKGludGVybmFsVmFsdWUgLyBiYXNpcyk7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFZhbHVlIC09IChyZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSkgKiBiYXNpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdnZXN0ICo9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0QnVmKC4uLmJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRCdWY7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdFZpZXcoLi4udmlld3MpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHZpZXcsIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmlldztcclxufVxyXG5mdW5jdGlvbiB1dGlsRGVjb2RlVEMoKSB7XHJcbiAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4KTtcclxuICAgIGlmICh0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGggPj0gMikge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjEgPSAoYnVmWzBdID09PSAweEZGKSAmJiAoYnVmWzFdICYgMHg4MCk7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMiA9IChidWZbMF0gPT09IDB4MDApICYmICgoYnVmWzFdICYgMHg4MCkgPT09IDB4MDApO1xyXG4gICAgICAgIGlmIChjb25kaXRpb24xIHx8IGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBiaWdJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IGJpZ0ludFZpZXcgPSBuZXcgVWludDhBcnJheShiaWdJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJpZ0ludFZpZXdbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgYmlnSW50Vmlld1swXSA9IChidWZbMF0gJiAweDgwKTtcclxuICAgIGNvbnN0IGJpZ0ludCA9IHV0aWxGcm9tQmFzZShiaWdJbnRWaWV3LCA4KTtcclxuICAgIGNvbnN0IHNtYWxsSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBzbWFsbEludFZpZXcgPSBuZXcgVWludDhBcnJheShzbWFsbEludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgc21hbGxJbnRWaWV3W2pdID0gYnVmW2pdO1xyXG4gICAgfVxyXG4gICAgc21hbGxJbnRWaWV3WzBdICY9IDB4N0Y7XHJcbiAgICBjb25zdCBzbWFsbEludCA9IHV0aWxGcm9tQmFzZShzbWFsbEludFZpZXcsIDgpO1xyXG4gICAgcmV0dXJuIChzbWFsbEludCAtIGJpZ0ludCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEVuY29kZVRDKHZhbHVlKSB7XHJcbiAgICBjb25zdCBtb2RWYWx1ZSA9ICh2YWx1ZSA8IDApID8gKHZhbHVlICogKC0xKSkgOiB2YWx1ZTtcclxuICAgIGxldCBiaWdJbnQgPSAxMjg7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmIChtb2RWYWx1ZSA8PSBiaWdJbnQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxJbnQgPSBiaWdJbnQgLSBtb2RWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldEJ1ZiA9IHV0aWxUb0Jhc2Uoc21hbGxJbnQsIDgsIGkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXRCdWYgPSB1dGlsVG9CYXNlKG1vZFZhbHVlLCA4LCBpKTtcclxuICAgICAgICAgICAgbGV0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBpZiAocmV0Vmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWYgPSByZXRCdWYuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRlbXBCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKHJldEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGVtcEJ1Zi5ieXRlTGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2sgKyAxXSA9IHRlbXBWaWV3W2tdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnSW50ICo9IE1hdGgucG93KDIsIDgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRXF1YWxCdWZmZXIoaW5wdXRCdWZmZXIxLCBpbnB1dEJ1ZmZlcjIpIHtcclxuICAgIGlmIChpbnB1dEJ1ZmZlcjEuYnl0ZUxlbmd0aCAhPT0gaW5wdXRCdWZmZXIyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2aWV3MSA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMSk7XHJcbiAgICBjb25zdCB2aWV3MiA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZpZXcxW2ldICE9PSB2aWV3MltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcGFkTnVtYmVyKGlucHV0TnVtYmVyLCBmdWxsTGVuZ3RoKSB7XHJcbiAgICBjb25zdCBzdHIgPSBpbnB1dE51bWJlci50b1N0cmluZygxMCk7XHJcbiAgICBpZiAoZnVsbExlbmd0aCA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRpZiA9IGZ1bGxMZW5ndGggLSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcGFkZGluZyA9IG5ldyBBcnJheShkaWYpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWY7IGkrKykge1xyXG4gICAgICAgIHBhZGRpbmdbaV0gPSBcIjBcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZGRpbmdTdHJpbmcgPSBwYWRkaW5nLmpvaW4oXCJcIik7XHJcbiAgICByZXR1cm4gcGFkZGluZ1N0cmluZy5jb25jYXQoc3RyKTtcclxufVxyXG5jb25zdCBiYXNlNjRUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcclxuY29uc3QgYmFzZTY0VXJsVGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89XCI7XHJcbmZ1bmN0aW9uIHRvQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBza2lwUGFkZGluZyA9IGZhbHNlLCBza2lwTGVhZGluZ1plcm9zID0gZmFsc2UpIHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBmbGFnMSA9IDA7XHJcbiAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgaWYgKHNraXBMZWFkaW5nWmVyb3MpIHtcclxuICAgICAgICBsZXQgbm9uWmVyb1Bvc2l0aW9uID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvUG9zaXRpb24gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShub25aZXJvUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaHIxID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcyID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMyA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBjb25zdCBlbmMxID0gY2hyMSA+PiAyO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoKGNocjEgJiAweDAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xyXG4gICAgICAgIGxldCBlbmMzID0gKChjaHIyICYgMHgwRikgPDwgMikgfCAoY2hyMyA+PiA2KTtcclxuICAgICAgICBsZXQgZW5jNCA9IGNocjMgJiAweDNGO1xyXG4gICAgICAgIGlmIChmbGFnMSA9PT0gMSkge1xyXG4gICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZsYWcyID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlbmM0ID0gNjQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNraXBQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmMzID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuYzQgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBmcm9tQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBjdXRUYWlsWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGZ1bmN0aW9uIGluZGV4T2YodG9TZWFyY2gpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdChpKSA9PT0gdG9TZWFyY2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDY0O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGVzdChpbmNvbWluZykge1xyXG4gICAgICAgIHJldHVybiAoKGluY29taW5nID09PSA2NCkgPyAweDAwIDogaW5jb21pbmcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMyID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMzID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmM0ID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBjaHIxID0gKHRlc3QoZW5jMSkgPDwgMikgfCAodGVzdChlbmMyKSA+PiA0KTtcclxuICAgICAgICBjb25zdCBjaHIyID0gKCh0ZXN0KGVuYzIpICYgMHgwRikgPDwgNCkgfCAodGVzdChlbmMzKSA+PiAyKTtcclxuICAgICAgICBjb25zdCBjaHIzID0gKCh0ZXN0KGVuYzMpICYgMHgwMykgPDwgNikgfCB0ZXN0KGVuYzQpO1xyXG4gICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpO1xyXG4gICAgICAgIGlmIChlbmMzICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYzQgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjdXRUYWlsWmVyb3MpIHtcclxuICAgICAgICBjb25zdCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBub25aZXJvU3RhcnQgPSAoLTEpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAob3V0cHV0TGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1N0YXJ0ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub25aZXJvU3RhcnQgIT09ICgtMSkpIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDAsIG5vblplcm9TdGFydCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9TdHJpbmcoYnVmZmVyKSB7XHJcbiAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZpZXcpIHtcclxuICAgICAgICByZXN1bHRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRTdHJpbmc7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHIpIHtcclxuICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nTGVuZ3RoKTtcclxuICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdFZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRCdWZmZXI7XHJcbn1cclxuY29uc3QgbG9nMiA9IE1hdGgubG9nKDIpO1xyXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZjIobGVuZ3RoKSB7XHJcbiAgICBjb25zdCBiYXNlID0gKE1hdGgubG9nKGxlbmd0aCkgLyBsb2cyKTtcclxuICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihiYXNlKTtcclxuICAgIGNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZChiYXNlKTtcclxuICAgIHJldHVybiAoKGZsb29yID09PSByb3VuZCkgPyBmbG9vciA6IHJvdW5kKTtcclxufVxyXG5mdW5jdGlvbiBjbGVhclByb3BzKG9iamVjdCwgcHJvcHNBcnJheSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzQXJyYXkpIHtcclxuICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BdO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGFycmF5QnVmZmVyVG9TdHJpbmcsIGJ1ZmZlclRvSGV4Q29kZXMsIGNoZWNrQnVmZmVyUGFyYW1zLCBjbGVhclByb3BzLCBmcm9tQmFzZTY0LCBnZXRQYXJhbWV0ZXJzVmFsdWUsIGdldFVUQ0RhdGUsIGlzRXF1YWxCdWZmZXIsIG5lYXJlc3RQb3dlck9mMiwgcGFkTnVtYmVyLCBzdHJpbmdUb0FycmF5QnVmZmVyLCB0b0Jhc2U2NCwgdXRpbENvbmNhdEJ1ZiwgdXRpbENvbmNhdFZpZXcsIHV0aWxEZWNvZGVUQywgdXRpbEVuY29kZVRDLCB1dGlsRnJvbUJhc2UsIHV0aWxUb0Jhc2UgfTtcbiIsICIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgR01PIEdsb2JhbFNpZ25cbiAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQZWN1bGlhciBWZW50dXJlc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFxuICogQXV0aG9yIDIwMTQtMjAxOSwgWXVyeSBTdHJvemhldnNreVxuICogXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiBcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICogXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKiBcbiAqL1xuXG5pbXBvcnQgKiBhcyBwdnRzdXRpbHMgZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCAqIGFzIHB2dXRpbHMgZnJvbSAncHZ1dGlscyc7XG5cbmZ1bmN0aW9uIGFzc2VydEJpZ0ludCgpIHtcclxuICAgIGlmICh0eXBlb2YgQmlnSW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGlzIG5vdCBkZWZpbmVkLiBZb3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaW1wbGVtZW50IEJpZ0ludC5cIik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29uY2F0KGJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSAnVWludDhBcnJheSdcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XG5cbmNsYXNzIFZpZXdXcml0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgd3JpdGUoYnVmKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGJ1Zik7XHJcbiAgICB9XHJcbiAgICBmaW5hbCgpIHtcclxuICAgICAgICByZXR1cm4gY29uY2F0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHBvd2VyczIgPSBbbmV3IFVpbnQ4QXJyYXkoWzFdKV07XHJcbmNvbnN0IGRpZ2l0c1N0cmluZyA9IFwiMDEyMzQ1Njc4OVwiO1xyXG5jb25zdCBOQU1FID0gXCJuYW1lXCI7XHJcbmNvbnN0IFZBTFVFX0hFWF9WSUVXID0gXCJ2YWx1ZUhleFZpZXdcIjtcclxuY29uc3QgSVNfSEVYX09OTFkgPSBcImlzSGV4T25seVwiO1xyXG5jb25zdCBJRF9CTE9DSyA9IFwiaWRCbG9ja1wiO1xyXG5jb25zdCBUQUdfQ0xBU1MgPSBcInRhZ0NsYXNzXCI7XHJcbmNvbnN0IFRBR19OVU1CRVIgPSBcInRhZ051bWJlclwiO1xyXG5jb25zdCBJU19DT05TVFJVQ1RFRCA9IFwiaXNDb25zdHJ1Y3RlZFwiO1xyXG5jb25zdCBGUk9NX0JFUiA9IFwiZnJvbUJFUlwiO1xyXG5jb25zdCBUT19CRVIgPSBcInRvQkVSXCI7XHJcbmNvbnN0IExPQ0FMID0gXCJsb2NhbFwiO1xyXG5jb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xyXG5jb25zdCBFTVBUWV9CVUZGRVIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbmNvbnN0IEVNUFRZX1ZJRVcgPSBuZXcgVWludDhBcnJheSgwKTtcclxuY29uc3QgRU5EX09GX0NPTlRFTlRfTkFNRSA9IFwiRW5kT2ZDb250ZW50XCI7XHJcbmNvbnN0IE9DVEVUX1NUUklOR19OQU1FID0gXCJPQ1RFVCBTVFJJTkdcIjtcclxuY29uc3QgQklUX1NUUklOR19OQU1FID0gXCJCSVQgU1RSSU5HXCI7XG5cbmZ1bmN0aW9uIEhleEJsb2NrKEJhc2VDbGFzcykge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgcmV0dXJuIF9hID0gY2xhc3MgU29tZSBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gcGFyYW1zLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHBhcmFtcy52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtcy52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldCB2YWx1ZUhleCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQgdmFsdWVIZXgodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJGbGFnICdpc0hleE9ubHknIGlzIG5vdCBzZXQsIGFib3J0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPT09IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSGV4T25seTogdGhpcy5pc0hleE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVIZXg6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hLk5BTUUgPSBcImhleEJsb2NrXCIsXHJcbiAgICAgICAgX2E7XHJcbn1cblxuY2xhc3MgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBibG9ja0xlbmd0aCA9IDAsIGVycm9yID0gRU1QVFlfU1RSSU5HLCB3YXJuaW5ncyA9IFtdLCB2YWx1ZUJlZm9yZURlY29kZSA9IEVNUFRZX1ZJRVcsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IHdhcm5pbmdzO1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWVCZWZvcmVEZWNvZGUpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGJsb2NrTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5OQU1FO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlQmVmb3JlRGVjb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJlZm9yZURlY29kZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJsb2NrTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FLFxyXG4gICAgICAgICAgICBibG9ja0xlbmd0aDogdGhpcy5ibG9ja0xlbmd0aCxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXHJcbiAgICAgICAgICAgIHdhcm5pbmdzOiB0aGlzLndhcm5pbmdzLFxyXG4gICAgICAgICAgICB2YWx1ZUJlZm9yZURlY29kZTogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCYXNlQmxvY2suTkFNRSA9IFwiYmFzZUJsb2NrXCI7XG5cbmNsYXNzIFZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG59XHJcblZhbHVlQmxvY2suTkFNRSA9IFwidmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIGlmIChpZEJsb2NrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gaWRCbG9jay5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlkQmxvY2sudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpZEJsb2NrLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoX2IgPSBpZEJsb2NrLnRhZ0NsYXNzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAoX2MgPSBpZEJsb2NrLnRhZ051bWJlcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChfZCA9IGlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlyc3RPY3RldCA9IDA7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4NDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHhDMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgyMDtcclxuICAgICAgICBpZiAodGhpcy50YWdOdW1iZXIgPCAzMSAmJiAhdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy50YWdOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBudW1iZXIgJj0gMHgxRjtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IGZpcnN0T2N0ZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy50YWdOdW1iZXIsIDcpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSArIDEpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3NpemVdID0gZW5jb2RlZFZpZXdbc2l6ZSAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoY3VyVmlldy5sZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoXSA9IGN1clZpZXdbY3VyVmlldy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWdDbGFzc01hc2sgPSBpbnRCdWZmZXJbMF0gJiAweEMwO1xyXG4gICAgICAgIHN3aXRjaCAodGFnQ2xhc3NNYXNrKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMHgwMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDQwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4ODA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHhDMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoNCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChpbnRCdWZmZXJbMF0gJiAweDIwKSA9PT0gMHgyMDtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRhZ051bWJlck1hc2sgPSBpbnRCdWZmZXJbMF0gJiAweDFGO1xyXG4gICAgICAgIGlmICh0YWdOdW1iZXJNYXNrICE9PSAweDFGKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKHRhZ051bWJlck1hc2spO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDE7XHJcbiAgICAgICAgICAgIGxldCBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDI1NSk7XHJcbiAgICAgICAgICAgIGxldCB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggPSAyNTU7XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRCdWZmZXJbY291bnRdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggKz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludFRhZ051bWJlckJ1ZmZlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAoY291bnQgKyAxKTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcclxuICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyLnNldCh0ZW1wQnVmZmVyVmlldyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGludFRhZ051bWJlckJ1ZmZlciwgNyk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGFnIHRvbyBsb25nLCByZXByZXNlbnRlZCBhcyBoZXgtY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCgodGhpcy50YWdDbGFzcyA9PT0gMSkpICYmXHJcbiAgICAgICAgICAgICh0aGlzLmlzQ29uc3RydWN0ZWQpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkNvbnN0cnVjdGVkIGVuY29kaW5nIHVzZWQgZm9yIHByaW1pdGl2ZSB0eXBlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdGFnQ2xhc3M6IHRoaXMudGFnQ2xhc3MsXHJcbiAgICAgICAgICAgIHRhZ051bWJlcjogdGhpcy50YWdOdW1iZXIsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsSWRlbnRpZmljYXRpb25CbG9jay5OQU1FID0gXCJpZGVudGlmaWNhdGlvbkJsb2NrXCI7XG5cbmNsYXNzIExvY2FsTGVuZ3RoQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGxlbkJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gKF9hID0gbGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAoX2IgPSBsZW5CbG9jay5sb25nRm9ybVVzZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gKF9jID0gbGVuQmxvY2subGVuZ3RoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW50QnVmZmVyWzBdID09PSAweEZGKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkxlbmd0aCBibG9jayAweEZGIGlzIHJlc2VydmVkIGJ5IHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaW50QnVmZmVyWzBdID09PSAweDgwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAhIShpbnRCdWZmZXJbMF0gJiAweDgwKTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gKGludEJ1ZmZlclswXSk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50QnVmZmVyWzBdICYgMHg3RjtcclxuICAgICAgICBpZiAoY291bnQgPiA4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgaW50ZWdlclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoY291bnQgKyAxKSA+IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5PZmZzZXQgPSBpbnB1dE9mZnNldCArIDE7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoQnVmZmVyVmlldyA9IHZpZXcuc3ViYXJyYXkobGVuT2Zmc2V0LCBsZW5PZmZzZXQgKyBjb3VudCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aEJ1ZmZlclZpZXdbY291bnQgLSAxXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGVuY29kZWQgbGVuZ3RoXCIpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHZ1dGlscy51dGlsRnJvbUJhc2UobGVuZ3RoQnVmZmVyVmlldywgOCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkICYmICh0aGlzLmxlbmd0aCA8PSAxMjcpKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJVbm5lY2Vzc2FyeSB1c2FnZSBvZiBsb25nIGxlbmd0aCBmb3JtXCIpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBjb3VudCArIDE7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgbGV0IHJldFZpZXc7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMTI3KVxyXG4gICAgICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4ODA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy5sZW5ndGgsIDgpO1xyXG4gICAgICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID4gMTI3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChFTVBUWV9CVUZGRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihlbmNvZGVkQnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggfCAweDgwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICBsb25nRm9ybVVzZWQ6IHRoaXMubG9uZ0Zvcm1Vc2VkLFxyXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxMZW5ndGhCbG9jay5OQU1FID0gXCJsZW5ndGhCbG9ja1wiO1xuXG5jb25zdCB0eXBlU3RvcmUgPSB7fTtcblxuY2xhc3MgQmFzZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCBwcmltaXRpdmVTY2hlbWEsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCB2YWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgICAgIGlmIChwcmltaXRpdmVTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltaXRpdmVTY2hlbWEgPSBwcmltaXRpdmVTY2hlbWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jayA9IG5ldyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5sZW5CbG9jayA9IG5ldyBMb2NhbExlbmd0aEJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jayA9IHZhbHVlQmxvY2tUeXBlID8gbmV3IHZhbHVlQmxvY2tUeXBlKHBhcmFtZXRlcnMpIDogbmV3IFZhbHVlQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICBwcmVwYXJlSW5kZWZpbml0ZUZvcm0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQmxvY2tCdWYgPSB0aGlzLmlkQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgIF93cml0ZXIud3JpdGUoaWRCbG9ja0J1Zik7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFsweDgwXSkuYnVmZmVyKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgQXJyYXlCdWZmZXIoMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9ja0J1ZiA9IHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuQmxvY2subGVuZ3RoID0gdmFsdWVCbG9ja0J1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBsZW5CbG9ja0J1ZiA9IHRoaXMubGVuQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKGxlbkJsb2NrQnVmKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZSh2YWx1ZUJsb2NrQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpZEJsb2NrOiB0aGlzLmlkQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB0aGlzLmxlbkJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZUJsb2NrOiB0aGlzLnZhbHVlQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVTY2hlbWEpXHJcbiAgICAgICAgICAgIG9iamVjdC5wcmltaXRpdmVTY2hlbWEgPSB0aGlzLnByaW1pdGl2ZVNjaGVtYS50b0pTT04oKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImFzY2lpXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYXNjaWlcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkFzY2lpRW5jb2RpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudG9CRVIoKSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUJlZm9yZURlY29kZVZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBpc0VxdWFsKG90aGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGhpc1JhdyA9IHRoaXMudG9CRVIoKTtcclxuICAgICAgICBjb25zdCBvdGhlclJhdyA9IG90aGVyLnRvQkVSKCk7XHJcbiAgICAgICAgcmV0dXJuIHB2dXRpbHMuaXNFcXVhbEJ1ZmZlcih0aGlzUmF3LCBvdGhlclJhdyk7XHJcbiAgICB9XHJcbn1cclxuQmFzZUJsb2NrLk5BTUUgPSBcIkJhc2VCbG9ja1wiO1xyXG5mdW5jdGlvbiBwcmVwYXJlSW5kZWZpbml0ZUZvcm0oYmFzZUJsb2NrKSB7XHJcbiAgICBpZiAoYmFzZUJsb2NrIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBiYXNlQmxvY2sudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAocHJlcGFyZUluZGVmaW5pdGVGb3JtKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbn1cblxuY2xhc3MgQmFzZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CdWZmZXIodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJyR7dGhpcy52YWx1ZUJsb2NrLnZhbHVlfSdgO1xyXG4gICAgfVxyXG59XHJcbkJhc2VTdHJpbmdCbG9jay5OQU1FID0gXCJCYXNlU3RyaW5nQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0hleE9ubHkgPSB0cnVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gaXNIZXhPbmx5O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUHJpbWl0aXZlVmFsdWVCbG9jay5OQU1FID0gXCJQcmltaXRpdmVWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR3O1xyXG5jbGFzcyBQcmltaXRpdmUgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbl9hJHcgPSBQcmltaXRpdmU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbWl0aXZlID0gX2EkdztcclxufSkoKTtcclxuUHJpbWl0aXZlLk5BTUUgPSBcIlBSSU1JVElWRVwiO1xuXG5mdW5jdGlvbiBsb2NhbENoYW5nZVR5cGUoaW5wdXRPYmplY3QsIG5ld1R5cGUpIHtcclxuICAgIGlmIChpbnB1dE9iamVjdCBpbnN0YW5jZW9mIG5ld1R5cGUpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPYmplY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgbmV3VHlwZSgpO1xyXG4gICAgbmV3T2JqZWN0LmlkQmxvY2sgPSBpbnB1dE9iamVjdC5pZEJsb2NrO1xyXG4gICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gaW5wdXRPYmplY3QubGVuQmxvY2s7XHJcbiAgICBuZXdPYmplY3Qud2FybmluZ3MgPSBpbnB1dE9iamVjdC53YXJuaW5ncztcclxuICAgIG5ld09iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dE9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXc7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG59XHJcbmZ1bmN0aW9uIGxvY2FsRnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IGlucHV0QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgY29uc3QgaW5jb21pbmdPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgIGxldCByZXR1cm5PYmplY3QgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgIGNvbnN0IGJhc2VCbG9jayA9IG5ldyBMb2NhbEJhc2VCbG9jaygpO1xyXG4gICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gYmFzZUJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmICghaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5pZEJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICBpZiAoIXJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgJiZcclxuICAgICAgICByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiSW5kZWZpbml0ZSBsZW5ndGggZm9ybSB1c2VkIGZvciBwcmltaXRpdmUgZW5jb2RpbmcgZm9ybVwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdBU04xVHlwZSA9IEJhc2VCbG9jaztcclxuICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyID49IDM3KSAmJlxyXG4gICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5pZEJsb2NrLmlzSGV4T25seSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlVOSVZFUlNBTCAzNyBhbmQgdXBwZXIgdGFncyBhcmUgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlR5cGUgW1VOSVZFUlNBTCAwXSBpcyByZXNlcnZlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVuZE9mQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Cb29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkludGVnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQml0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9jdGV0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW51bWVyYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVXRmOFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5USU1FO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIltVTklWRVJTQUwgMTVdIGlzIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXF1ZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JQTVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVUQ1RpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJtcFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuREFURTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGltZU9mRGF5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyB0eXBlU3RvcmUuQ29uc3RydWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyB0eXBlU3RvcmUuUHJpbWl0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmlkQmxvY2sgPSByZXR1cm5PYmplY3QuaWRCbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QubGVuQmxvY2sgPSByZXR1cm5PYmplY3QubGVuQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gcmV0dXJuT2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCA9IG5ld09iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgPyB0eXBlU3RvcmUuQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgIDogdHlwZVN0b3JlLlByaW1pdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm5PYmplY3QgPSBsb2NhbENoYW5nZVR5cGUocmV0dXJuT2JqZWN0LCBuZXdBU04xVHlwZSk7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID8gaW5wdXRMZW5ndGggOiByZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoKTtcclxuICAgIHJldHVybk9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbmNvbWluZ09mZnNldCwgaW5jb21pbmdPZmZzZXQgKyByZXR1cm5PYmplY3QuYmxvY2tMZW5ndGgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IHJlc3VsdE9mZnNldCxcclxuICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBmcm9tQkVSKGlucHV0QnVmZmVyKSB7XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICByZXN1bHQuZXJyb3IgPSBcIklucHV0IGJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc2xpY2UoKSwgMCwgaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCk7XHJcbn1cblxuZnVuY3Rpb24gY2hlY2tMZW4oaW5kZWZpbml0ZUxlbmd0aCwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaW5kZWZpbml0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbmd0aDtcclxufVxyXG5jbGFzcyBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCBpc0luZGVmaW5pdGVGb3JtID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoY2hlY2tMZW4odGhpcy5pc0luZGVmaW5pdGVGb3JtLCBpbnB1dExlbmd0aCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVybk9iamVjdCA9IGxvY2FsRnJvbUJFUih2aWV3LCBjdXJyZW50T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5PYmplY3Qub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHJldHVybk9iamVjdC5yZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QucmVzdWx0Lndhcm5pbmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gcmV0dXJuT2JqZWN0Lm9mZnNldDtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmV0dXJuT2JqZWN0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0gJiYgcmV0dXJuT2JqZWN0LnJlc3VsdC5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV0uY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vIEVuZE9mQ29udGVudCBibG9jayBlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB2YWx1ZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnZhbHVlLnB1c2godmFsdWUudG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLk5BTUUgPSBcIkNvbnN0cnVjdGVkVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdjtcclxuY2xhc3MgQ29uc3RydWN0ZWQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoXCJhc2NpaVwiKS5zcGxpdChcIlxcblwiKS5tYXAobyA9PiBgICAke299YCkuam9pbihcIlxcblwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IHRoaXMuaWRCbG9jay50YWdDbGFzcyA9PT0gM1xyXG4gICAgICAgICAgICA/IGBbJHt0aGlzLmlkQmxvY2sudGFnTnVtYmVyfV1gXHJcbiAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYCR7YmxvY2tOYW1lfSA6XFxuJHt2YWx1ZXMuam9pbihcIlxcblwiKX1gXHJcbiAgICAgICAgICAgIDogYCR7YmxvY2tOYW1lfSA6YDtcclxuICAgIH1cclxufVxyXG5fYSR2ID0gQ29uc3RydWN0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ29uc3RydWN0ZWQgPSBfYSR2O1xyXG59KSgpO1xyXG5Db25zdHJ1Y3RlZC5OQU1FID0gXCJDT05TVFJVQ1RFRFwiO1xuXG5jbGFzcyBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxufVxyXG5Mb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sub3ZlcnJpZGUgPSBcIkVuZE9mQ29udGVudFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHU7XHJcbmNsYXNzIEVuZE9mQ29udGVudCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDA7XHJcbiAgICB9XHJcbn1cclxuX2EkdSA9IEVuZE9mQ29udGVudDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQgPSBfYSR1O1xyXG59KSgpO1xyXG5FbmRPZkNvbnRlbnQuTkFNRSA9IEVORF9PRl9DT05URU5UX05BTUU7XG5cbnZhciBfYSR0O1xyXG5jbGFzcyBOdWxsIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOb24temVybyBsZW5ndGggb2YgdmFsdWUgYmxvY2sgZm9yIE51bGwgdHlwZVwiKTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIGlmICgoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCkgPiBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDIpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDA1O1xyXG4gICAgICAgICAgICByZXRWaWV3WzFdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdyaXRlcikge1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUocmV0QnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkdCA9IE51bGw7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVsbCA9IF9hJHQ7XHJcbn0pKCk7XHJcbk51bGwuTkFNRSA9IFwiTlVMTFwiO1xuXG5jbGFzcyBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtZXRlcnMudmFsdWVIZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB0aGlzLnZhbHVlSGV4Vmlldykge1xyXG4gICAgICAgICAgICBpZiAob2N0ZXQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1swXSA9IHZhbHVlID8gMHhGRiA6IDB4MDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiQm9vbGVhbiB2YWx1ZSBlbmNvZGVkIGluIG1vcmUgdGhlbiAxIG9jdGV0XCIpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCb29sZWFuVmFsdWVCbG9jay5OQU1FID0gXCJCb29sZWFuVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcztcclxuY2xhc3MgQm9vbGVhbiBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMuZ2V0VmFsdWV9YDtcclxuICAgIH1cclxufVxyXG5fYSRzID0gQm9vbGVhbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Cb29sZWFuID0gX2EkcztcclxufSkoKTtcclxuQm9vbGVhbi5OQU1FID0gXCJCT09MRUFOXCI7XG5cbmNsYXNzIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gMDtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdGhpcy52YWx1ZVtpXS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIE9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gT0NURVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJPY3RldFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHI7XHJcbmNsYXNzIE9jdGV0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnQgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgT2N0ZXRTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29udGVudC52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIuY29uY2F0KGFycmF5KTtcclxuICAgIH1cclxufVxyXG5fYSRyID0gT2N0ZXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2N0ZXRTdHJpbmcgPSBfYSRyO1xyXG59KSgpO1xyXG5PY3RldFN0cmluZy5OQU1FID0gT0NURVRfU1RSSU5HX05BTUU7XG5cbmNsYXNzIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHVudXNlZEJpdHMgPSAwLCBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSB0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAtMTtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdmFsdWUuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gQklUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLnVudXNlZEJpdHMgPiAwKSAmJiAodmFsdWVCbG9jay51bnVzZWRCaXRzID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVc2luZyBvZiBcXFwidW51c2VkIGJpdHNcXFwiIGluc2lkZSBjb25zdHJ1Y3RpdmUgQklUIFNUUklORyBhbGxvd2VkIGZvciBsZWFzdCBvbmUgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHZhbHVlQmxvY2sudW51c2VkQml0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGludEJ1ZmZlclswXTtcclxuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzID4gNykge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbnVzZWQgYml0cyBmb3IgQml0U3RyaW5nIG11c3QgYmUgaW4gcmFuZ2UgMC03XCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnVudXNlZEJpdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSAoaW5wdXRMZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnRCdWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gdGhpcy51bnVzZWRCaXRzO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHRoaXMudmFsdWVIZXhWaWV3LCAxKTtcclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cyxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJpdFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHE7XHJcbmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVIZXggPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgdmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgICAgIGJpdHMucHVzaChieXRlLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYml0c1N0ciA9IGJpdHMuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke2JpdHNTdHIuc3Vic3RyaW5nKDAsIGJpdHNTdHIubGVuZ3RoIC0gdGhpcy52YWx1ZUJsb2NrLnVudXNlZEJpdHMpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9hJHEgPSBCaXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQml0U3RyaW5nID0gX2EkcTtcclxufSkoKTtcclxuQml0U3RyaW5nLk5BTUUgPSBCSVRfU1RSSU5HX05BTUU7XG5cbnZhciBfYSRwO1xyXG5mdW5jdGlvbiB2aWV3QWRkKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBsZXQgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgY29uc3QgbWF4ID0gKHNlY29uZFZpZXdDb3B5TGVuZ3RoIDwgZmlyc3RWaWV3Q29weUxlbmd0aCkgPyBmaXJzdFZpZXdDb3B5TGVuZ3RoIDogc2Vjb25kVmlld0NvcHlMZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gbWF4OyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPCBzZWNvbmRWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY1swXSA9IHZhbHVlIC8gMTA7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPj0gZmlyc3RWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcobmV3IFVpbnQ4QXJyYXkoW3ZhbHVlICUgMTBdKSwgZmlyc3RWaWV3Q29weSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgJSAxMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZmlyc3RWaWV3Q29weSk7XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weTtcclxufVxyXG5mdW5jdGlvbiBwb3dlcjIobikge1xyXG4gICAgaWYgKG4gPj0gcG93ZXJzMi5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gcG93ZXJzMi5sZW5ndGg7IHAgPD0gbjsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gKHBvd2VyczJbcCAtIDFdKS5zbGljZSgwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChkaWdpdHMubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBVaW50OEFycmF5KFsoZGlnaXRzW2ldIDw8IDEpICsgY1swXV0pO1xyXG4gICAgICAgICAgICAgICAgY1swXSA9IG5ld1ZhbHVlWzBdIC8gMTA7XHJcbiAgICAgICAgICAgICAgICBkaWdpdHNbaV0gPSBuZXdWYWx1ZVswXSAlIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZGlnaXRzKTtcclxuICAgICAgICAgICAgcG93ZXJzMi5wdXNoKGRpZ2l0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvd2VyczJbbl07XHJcbn1cclxuZnVuY3Rpb24gdmlld1N1YihmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBsZXQgYiA9IDA7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHNlY29uZFZpZXdDb3B5TGVuZ3RoOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICh2YWx1ZSA8IDApOlxyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYiA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gKGZpcnN0Vmlld0NvcHlMZW5ndGggLSBzZWNvbmRWaWV3Q29weUxlbmd0aCArIDEpOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHkuc2xpY2UoKTtcclxufVxyXG5jbGFzcyBMb2NhbEludGVnZXJWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0VmFsdWVIZXgoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgSW50ZWdlciBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVEZWModikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gdjtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ1dGlscy51dGlsRW5jb2RlVEModikpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlRGVjKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21ERVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCwgZXhwZWN0ZWRMZW5ndGggPSAwKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApICE9PSAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCA8IGV4cGVjdGVkTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKSA+IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVuZ3RoID0gdmlldy5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9ERVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gJiAweDgwKSAhPT0gMCk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXcuc2V0KHZpZXcsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdXBkYXRlZFZpZXc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApID09PSAwKSk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b0JFUihzaXplT25seSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCaXQgPSAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLSAxO1xyXG4gICAgICAgIGxldCBkaWdpdHMgPSBuZXcgVWludDhBcnJheSgodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLyAzKTtcclxuICAgICAgICBsZXQgYml0TnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJ5dGU7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGJ5dGVOdW1iZXIgPSAoYXNuMVZpZXcuYnl0ZUxlbmd0aCAtIDEpOyBieXRlTnVtYmVyID49IDA7IGJ5dGVOdW1iZXItLSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGFzbjFWaWV3W2J5dGVOdW1iZXJdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChjdXJyZW50Qnl0ZSAmIDEpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiaXROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmaXJzdEJpdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdTdWIocG93ZXIyKGJpdE51bWJlciksIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIi1cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld0FkZChkaWdpdHMsIHBvd2VyMihiaXROdW1iZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiaXROdW1iZXIrKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCeXRlID4+PSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChkaWdpdHNbaV0pXHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdChkaWdpdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmxhZyA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KDApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuX2EkcCA9IExvY2FsSW50ZWdlclZhbHVlQmxvY2s7XHJcbkxvY2FsSW50ZWdlclZhbHVlQmxvY2suTkFNRSA9IFwiSW50ZWdlclZhbHVlQmxvY2tcIjtcclxuKCgpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYSRwLnByb3RvdHlwZSwgXCJ2YWx1ZUhleFwiLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHYpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufSkoKTtcblxudmFyIF9hJG87XHJcbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjtcclxuICAgIH1cclxuICAgIHRvQmlnSW50KCkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21CaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBjb25zdCBiaWdJbnRWYWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XHJcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBjb25zdCBoZXggPSBiaWdJbnRWYWx1ZS50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLCBcIlwiKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChoZXgpKTtcclxuICAgICAgICBpZiAoYmlnSW50VmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFVpbnQ4QXJyYXkodmlldy5sZW5ndGggKyAodmlld1swXSAmIDB4ODAgPyAxIDogMCkpO1xyXG4gICAgICAgICAgICBmaXJzdFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdEludCA9IEJpZ0ludChgMHgke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KGZpcnN0KX1gKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSW50ID0gZmlyc3RJbnQgKyBiaWdJbnRWYWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChzZWNvbmRJbnQudG9TdHJpbmcoMTYpKSk7XHJcbiAgICAgICAgICAgIHNlY29uZFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoc2Vjb25kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFswXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh2aWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogd3JpdGVyLmZpbmFsKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGNvbnZlcnRUb0RFUigpIHtcclxuICAgICAgICBjb25zdCBpbnRlZ2VyID0gbmV3IEludGVnZXIoeyB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyB9KTtcclxuICAgICAgICBpbnRlZ2VyLnZhbHVlQmxvY2sudG9ERVIoKTtcclxuICAgICAgICByZXR1cm4gaW50ZWdlcjtcclxuICAgIH1cclxuICAgIGNvbnZlcnRGcm9tREVSKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3WzBdID09PSAwXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSlcclxuICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCl9YDtcclxuICAgIH1cclxufVxyXG5fYSRvID0gSW50ZWdlcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JbnRlZ2VyID0gX2EkbztcclxufSkoKTtcclxuSW50ZWdlci5OQU1FID0gXCJJTlRFR0VSXCI7XG5cbnZhciBfYSRuO1xyXG5jbGFzcyBFbnVtZXJhdGVkIGV4dGVuZHMgSW50ZWdlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMDtcclxuICAgIH1cclxufVxyXG5fYSRuID0gRW51bWVyYXRlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbnVtZXJhdGVkID0gX2EkbjtcclxufSkoKTtcclxuRW51bWVyYXRlZC5OQU1FID0gXCJFTlVNRVJBVEVEXCI7XG5cbmNsYXNzIExvY2FsU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAtMSwgaXNGaXJzdFNpZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgICAgICB0aGlzLmlzRmlyc3RTaWQgPSBpc0ZpcnN0U2lkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBsZXQgYml0cyA9IEJpZ0ludCh2YWx1ZSkudG9TdHJpbmcoMik7XHJcbiAgICAgICAgd2hpbGUgKGJpdHMubGVuZ3RoICUgNykge1xyXG4gICAgICAgICAgICBiaXRzID0gXCIwXCIgKyBiaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpdHMubGVuZ3RoIC8gNyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBieXRlc1tpXSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaSAqIDcsIGkgKiA3ICsgNyksIDIpICsgKGkgKyAxIDwgYnl0ZXMubGVuZ3RoID8gMHg4MCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CRVIoYnl0ZXMuYnVmZmVyLCAwLCBieXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXc7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFNpZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpZFZhbHVlID0gdGhpcy52YWx1ZURlYztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDM5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMC5cIjtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDc5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMS5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjIuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgICAgIGlzRmlyc3RTaWQ6IHRoaXMuaXNGaXJzdFNpZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2lkVmFsdWVCbG9jay5OQU1FID0gXCJzaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gdGhpcy52YWx1ZVswXTtcclxuICAgICAgICAgICAgICAgIGxldCBwbHVzID0gMDtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkQmxvY2sudmFsdWVEZWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTSUQgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWRTSUQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VkU0lEICsgcGx1cztcclxuICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpZCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkVmFsdWUgPSBCaWdJbnQoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZUJpZ0ludCA9IHNpZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtpXS5pc0ZpcnN0U2lkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAyLnske3NpZFN0cn0gLSA4MH1gO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbTtcclxuY2xhc3MgT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA2O1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbSA9IE9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllciA9IF9hJG07XHJcbn0pKCk7XHJcbk9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiT0JKRUNUIElERU5USUZJRVJcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IDAsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2suTkFNRSA9IFwicmVsYXRpdmVTaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbDtcclxuY2xhc3MgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTM7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRsID0gUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciA9IF9hJGw7XHJcbn0pKCk7XHJcblJlbGF0aXZlT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJcIjtcblxudmFyIF9hJGs7XHJcbmNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTY7XHJcbiAgICB9XHJcbn1cclxuX2EkayA9IFNlcXVlbmNlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNlcXVlbmNlID0gX2EkaztcclxufSkoKTtcclxuU2VxdWVuY2UuTkFNRSA9IFwiU0VRVUVOQ0VcIjtcblxudmFyIF9hJGo7XHJcbmNsYXNzIFNldCBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE3O1xyXG4gICAgfVxyXG59XHJcbl9hJGogPSBTZXQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2V0ID0gX2EkajtcclxufSkoKTtcclxuU2V0Lk5BTUUgPSBcIlNFVFwiO1xuXG5jbGFzcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU2ltcGxlU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW4gPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW4pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nQmxvY2suTkFNRSA9IFwiU0lNUExFIFNUUklOR1wiO1xuXG5jbGFzcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjhTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGBFcnJvciBkdXJpbmcgXCJkZWNvZGVVUklDb21wb25lbnRcIjogJHtleH0sIHVzaW5nIHJhdyBzdHJpbmdgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9CaW5hcnkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlV0ZjhTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRpO1xyXG5jbGFzcyBVdGY4U3RyaW5nIGV4dGVuZHMgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMjtcclxuICAgIH1cclxufVxyXG5fYSRpID0gVXRmOFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VdGY4U3RyaW5nID0gX2EkaTtcclxufSkoKTtcclxuVXRmOFN0cmluZy5OQU1FID0gXCJVVEY4U3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmMTZTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGYxNlN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm1wU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCbXBTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRoO1xyXG5jbGFzcyBCbXBTdHJpbmcgZXh0ZW5kcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMwO1xyXG4gICAgfVxyXG59XHJcbl9hJGggPSBCbXBTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm1wU3RyaW5nID0gX2EkaDtcclxufSkoKTtcclxuQm1wU3RyaW5nLk5BTUUgPSBcIkJNUFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjb3B5QnVmZmVyID0gQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0QnVmZmVyKSA/IGlucHV0QnVmZmVyLnNsaWNlKCkuYnVmZmVyIDogaW5wdXRCdWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29weUJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVZpZXcubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2ldID0gdmFsdWVWaWV3W2kgKyAzXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAxXSA9IHZhbHVlVmlld1tpICsgMl07XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMl0gPSAweDAwO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDNdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDMyQXJyYXkoY29weUJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbmd0aCA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuZ3RoICogNCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSksIDgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvZGVCdWYpO1xyXG4gICAgICAgICAgICBpZiAoY29kZVZpZXcubGVuZ3RoID4gNClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBkaWYgPSA0IC0gY29kZVZpZXcubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGNvZGVWaWV3Lmxlbmd0aCAtIDEpOyBqID49IDA7IGotLSlcclxuICAgICAgICAgICAgICAgIHZhbHVlSGV4Vmlld1tpICogNCArIGogKyBkaWZdID0gY29kZVZpZXdbal07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRnO1xyXG5jbGFzcyBVbml2ZXJzYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI4O1xyXG4gICAgfVxyXG59XHJcbl9hJGcgPSBVbml2ZXJzYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nID0gX2EkZztcclxufSkoKTtcclxuVW5pdmVyc2FsU3RyaW5nLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuXG52YXIgX2EkZjtcclxuY2xhc3MgTnVtZXJpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTg7XHJcbiAgICB9XHJcbn1cclxuX2EkZiA9IE51bWVyaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZyA9IF9hJGY7XHJcbn0pKCk7XHJcbk51bWVyaWNTdHJpbmcuTkFNRSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuXG52YXIgX2EkZTtcclxuY2xhc3MgUHJpbnRhYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxOTtcclxuICAgIH1cclxufVxyXG5fYSRlID0gUHJpbnRhYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZyA9IF9hJGU7XHJcbn0pKCk7XHJcblByaW50YWJsZVN0cmluZy5OQU1FID0gXCJQcmludGFibGVTdHJpbmdcIjtcblxudmFyIF9hJGQ7XHJcbmNsYXNzIFRlbGV0ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIwO1xyXG4gICAgfVxyXG59XHJcbl9hJGQgPSBUZWxldGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmcgPSBfYSRkO1xyXG59KSgpO1xyXG5UZWxldGV4U3RyaW5nLk5BTUUgPSBcIlRlbGV0ZXhTdHJpbmdcIjtcblxudmFyIF9hJGM7XHJcbmNsYXNzIFZpZGVvdGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMTtcclxuICAgIH1cclxufVxyXG5fYSRjID0gVmlkZW90ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmcgPSBfYSRjO1xyXG59KSgpO1xyXG5WaWRlb3RleFN0cmluZy5OQU1FID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuXG52YXIgX2EkYjtcclxuY2xhc3MgSUE1U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMjtcclxuICAgIH1cclxufVxyXG5fYSRiID0gSUE1U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLklBNVN0cmluZyA9IF9hJGI7XHJcbn0pKCk7XHJcbklBNVN0cmluZy5OQU1FID0gXCJJQTVTdHJpbmdcIjtcblxudmFyIF9hJGE7XHJcbmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI1O1xyXG4gICAgfVxyXG59XHJcbl9hJGEgPSBHcmFwaGljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmcgPSBfYSRhO1xyXG59KSgpO1xyXG5HcmFwaGljU3RyaW5nLk5BTUUgPSBcIkdyYXBoaWNTdHJpbmdcIjtcblxudmFyIF9hJDk7XHJcbmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI2O1xyXG4gICAgfVxyXG59XHJcbl9hJDkgPSBWaXNpYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpc2libGVTdHJpbmcgPSBfYSQ5O1xyXG59KSgpO1xyXG5WaXNpYmxlU3RyaW5nLk5BTUUgPSBcIlZpc2libGVTdHJpbmdcIjtcblxudmFyIF9hJDg7XHJcbmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI3O1xyXG4gICAgfVxyXG59XHJcbl9hJDggPSBHZW5lcmFsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmcgPSBfYSQ4O1xyXG59KSgpO1xyXG5HZW5lcmFsU3RyaW5nLk5BTUUgPSBcIkdlbmVyYWxTdHJpbmdcIjtcblxudmFyIF9hJDc7XHJcbmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjk7XHJcbiAgICB9XHJcbn1cclxuX2EkNyA9IENoYXJhY3RlclN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmcgPSBfYSQ3O1xyXG59KSgpO1xyXG5DaGFyYWN0ZXJTdHJpbmcuTkFNRSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG5cbnZhciBfYSQ2O1xyXG5jbGFzcyBVVENUaW1lIGV4dGVuZHMgVmlzaWJsZVN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCB2YWx1ZURhdGUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gMDtcclxuICAgICAgICB0aGlzLm1vbnRoID0gMDtcclxuICAgICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gMDtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSAwO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbaV0gPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWVEYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUodmFsdWVEYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudG9CdWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSkpO1xyXG4gICAgfVxyXG4gICAgdG9CdWZmZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHIubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICB0aGlzLnllYXIgPSBpbnB1dERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICB0aGlzLm1vbnRoID0gaW5wdXREYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gaW5wdXREYXRlLmdldFVUQ0RhdGUoKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBpbnB1dERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IGlucHV0RGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IC8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSlaL2lnO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoaW5wdXRTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMV0sIDEwKTtcclxuICAgICAgICBpZiAoeWVhciA+PSA1MClcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMTkwMCArIHllYXI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAyMDAwICsgeWVhcjtcclxuICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMl0sIDEwKTtcclxuICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzNdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNF0sIDEwKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzVdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVs2XSwgMTApO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IEFycmF5KDcpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVswXSA9IHB2dXRpbHMucGFkTnVtYmVyKCgodGhpcy55ZWFyIDwgMjAwMCkgPyAodGhpcy55ZWFyIC0gMTkwMCkgOiAodGhpcy55ZWFyIC0gMjAwMCkpLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMl0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzNdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNF0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzVdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs2XSA9IFwiWlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMueWVhcixcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy5kYXksXHJcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcclxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcclxuICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDYgPSBVVENUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVUQ1RpbWUgPSBfYSQ2O1xyXG59KSgpO1xyXG5VVENUaW1lLk5BTUUgPSBcIlVUQ1RpbWVcIjtcblxudmFyIF9hJDU7XHJcbmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIFVUQ1RpbWUge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iO1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIChfYiA9IHRoaXMubWlsbGlzZWNvbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICh0aGlzLm1pbGxpc2Vjb25kID0gMCk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjQ7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICBzdXBlci5mcm9tRGF0ZShpbnB1dERhdGUpO1xyXG4gICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzVVRDID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBkYXRlVGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IDA7XHJcbiAgICAgICAgbGV0IHBhcnNlcjtcclxuICAgICAgICBsZXQgaG91ckRpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGxldCBtaW51dGVEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBpZiAoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiWlwiKSB7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZy5zdWJzdHJpbmcoMCwgaW5wdXRTdHJpbmcubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGlzVVRDID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IG5ldyBOdW1iZXIoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiK1wiKTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKGRpZmZlcmVuY2VQb3NpdGlvbiArIDEpO1xyXG4gICAgICAgICAgICAgICAgdGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGRpZmZlcmVuY2VQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSAyKSAmJiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygwLCAyKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGhvdXJEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi5cIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9PT0gLTEpXHJcbiAgICAgICAgICAgIGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIixcIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25QYXJ0Q2hlY2sgPSBuZXcgTnVtYmVyKGAwJHt0aW1lU3RyaW5nLnN1YnN0cmluZyhmcmFjdGlvblBvaW50UG9zaXRpb24pfWApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpO1xyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGZyYWN0aW9uUG9pbnRQb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDgpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEwKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDYwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5taW51dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEyKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxNCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoZGF0ZVRpbWVTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyc2VyQXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIGhvdXJEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIG1pbnV0ZURpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKTtcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gdGVtcERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tb250aCA9IHRlbXBEYXRlLmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF5ID0gdGVtcERhdGUuZ2V0VVRDRGF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG91ciA9IHRlbXBEYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlID0gdGVtcERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMueWVhciwgNCkpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWlsbGlzZWNvbmQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbGxpc2Vjb25kLCAzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIlpcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBtaWxsaXNlY29uZDogdGhpcy5taWxsaXNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDUgPSBHZW5lcmFsaXplZFRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lID0gX2EkNTtcclxufSkoKTtcclxuR2VuZXJhbGl6ZWRUaW1lLk5BTUUgPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuXG52YXIgX2EkNDtcclxuY2xhc3MgREFURSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzE7XHJcbiAgICB9XHJcbn1cclxuX2EkNCA9IERBVEU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuREFURSA9IF9hJDQ7XHJcbn0pKCk7XHJcbkRBVEUuTkFNRSA9IFwiREFURVwiO1xuXG52YXIgX2EkMztcclxuY2xhc3MgVGltZU9mRGF5IGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMjtcclxuICAgIH1cclxufVxyXG5fYSQzID0gVGltZU9mRGF5O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRpbWVPZkRheSA9IF9hJDM7XHJcbn0pKCk7XHJcblRpbWVPZkRheS5OQU1FID0gXCJUaW1lT2ZEYXlcIjtcblxudmFyIF9hJDI7XHJcbmNsYXNzIERhdGVUaW1lIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMztcclxuICAgIH1cclxufVxyXG5fYSQyID0gRGF0ZVRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRGF0ZVRpbWUgPSBfYSQyO1xyXG59KSgpO1xyXG5EYXRlVGltZS5OQU1FID0gXCJEYXRlVGltZVwiO1xuXG52YXIgX2EkMTtcclxuY2xhc3MgRHVyYXRpb24gZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM0O1xyXG4gICAgfVxyXG59XHJcbl9hJDEgPSBEdXJhdGlvbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EdXJhdGlvbiA9IF9hJDE7XHJcbn0pKCk7XHJcbkR1cmF0aW9uLk5BTUUgPSBcIkR1cmF0aW9uXCI7XG5cbnZhciBfYTtcclxuY2xhc3MgVElNRSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTQ7XHJcbiAgICB9XHJcbn1cclxuX2EgPSBUSU1FO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRJTUUgPSBfYTtcclxufSkoKTtcclxuVElNRS5OQU1FID0gXCJUSU1FXCI7XG5cbmNsYXNzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIENob2ljZSBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJlcGVhdGVkIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBuZXcgQW55KCksIGxvY2FsID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSYXdEYXRhIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgZGF0YSA9IEVNUFRZX1ZJRVcgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBDaG9pY2UpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0U2NoZW1hLnZhbHVlLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYS52YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIldyb25nIHZhbHVlcyBmb3IgQ2hvaWNlIHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQW55KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChyb290IGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyByb290IG9iamVjdFwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dERhdGEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIGRhdGFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChJRF9CTE9DSyBpbiBpbnB1dFNjaGVtYSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKEZST01fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChUT19CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmNvZGVkSWQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnRvQkVSKGZhbHNlKTtcclxuICAgIGlmIChlbmNvZGVkSWQuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGVuY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVjb2RlZE9mZnNldCA9IGlucHV0U2NoZW1hLmlkQmxvY2suZnJvbUJFUihlbmNvZGVkSWQsIDAsIGVuY29kZWRJZC5ieXRlTGVuZ3RoKTtcclxuICAgIGlmIChkZWNvZGVkT2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGRlY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX0NMQVNTKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ0NsYXNzICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19OVU1CRVIpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShJU19DT05TVFJVQ1RFRCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0NvbnN0cnVjdGVkICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCEoSVNfSEVYX09OTFkgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgaWYgKChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYVZpZXcgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IGlucHV0RGF0YS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoc2NoZW1hVmlldy5sZW5ndGggIT09IGFzbjFWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hVmlldy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hVmlld1tpXSAhPT0gYXNuMVZpZXdbMV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGxldCBhZG1pc3Npb24gPSAwO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJVbmtub3duIGVycm9yXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggPT09IDApICYmXHJcbiAgICAgICAgICAgIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCAhPT0gMCkpIHtcclxuICAgICAgICAgICAgbGV0IF9vcHRpb25hbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIF9vcHRpb25hbCA9IF9vcHRpb25hbCAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCB8fCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9uYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgoaSAtIGFkbWlzc2lvbikgPj0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IGxlbmd0aCBiZXR3ZWVuIEFTTi4xIGRhdGEgYW5kIHNjaGVtYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKE5BTUUgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlSb290ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTE9DQUwgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubG9jYWwpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gaW5wdXREYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID09PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0ucHVzaChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpIC0gYWRtaXNzaW9uXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEgJiZcclxuICAgICAgICAoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXREYXRhLnZhbHVlQmxvY2spKSB7XHJcbiAgICAgICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlU2NoZW1hKHJvb3QsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdmVyaWZ5U2NoZW1hKGlucHV0QnVmZmVyLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hIHR5cGVcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEoYXNuMS5yZXN1bHQsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYSk7XHJcbn1cblxuZXhwb3J0IHsgQW55LCBCYXNlQmxvY2ssIEJhc2VTdHJpbmdCbG9jaywgQml0U3RyaW5nLCBCbXBTdHJpbmcsIEJvb2xlYW4sIENoYXJhY3RlclN0cmluZywgQ2hvaWNlLCBDb25zdHJ1Y3RlZCwgREFURSwgRGF0ZVRpbWUsIER1cmF0aW9uLCBFbmRPZkNvbnRlbnQsIEVudW1lcmF0ZWQsIEdlbmVyYWxTdHJpbmcsIEdlbmVyYWxpemVkVGltZSwgR3JhcGhpY1N0cmluZywgSGV4QmxvY2ssIElBNVN0cmluZywgSW50ZWdlciwgTnVsbCwgTnVtZXJpY1N0cmluZywgT2JqZWN0SWRlbnRpZmllciwgT2N0ZXRTdHJpbmcsIFByaW1pdGl2ZSwgUHJpbnRhYmxlU3RyaW5nLCBSYXdEYXRhLCBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIsIFJlcGVhdGVkLCBTZXF1ZW5jZSwgU2V0LCBUSU1FLCBUZWxldGV4U3RyaW5nLCBUaW1lT2ZEYXksIFVUQ1RpbWUsIFVuaXZlcnNhbFN0cmluZywgVXRmOFN0cmluZywgVmFsdWVCbG9jaywgVmlkZW90ZXhTdHJpbmcsIFZpZXdXcml0ZXIsIFZpc2libGVTdHJpbmcsIGNvbXBhcmVTY2hlbWEsIGZyb21CRVIsIHZlcmlmeVNjaGVtYSB9O1xuIiwgImV4cG9ydCB2YXIgQXNuVHlwZVR5cGVzO1xuKGZ1bmN0aW9uIChBc25UeXBlVHlwZXMpIHtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2VxdWVuY2VcIl0gPSAwXSA9IFwiU2VxdWVuY2VcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2V0XCJdID0gMV0gPSBcIlNldFwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJDaG9pY2VcIl0gPSAyXSA9IFwiQ2hvaWNlXCI7XG59KShBc25UeXBlVHlwZXMgfHwgKEFzblR5cGVUeXBlcyA9IHt9KSk7XG5leHBvcnQgdmFyIEFzblByb3BUeXBlcztcbihmdW5jdGlvbiAoQXNuUHJvcFR5cGVzKSB7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkFueVwiXSA9IDFdID0gXCJBbnlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDJdID0gXCJCb29sZWFuXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9jdGV0U3RyaW5nXCJdID0gM10gPSBcIk9jdGV0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJpdFN0cmluZ1wiXSA9IDRdID0gXCJCaXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSW50ZWdlclwiXSA9IDVdID0gXCJJbnRlZ2VyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkVudW1lcmF0ZWRcIl0gPSA2XSA9IFwiRW51bWVyYXRlZFwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPYmplY3RJZGVudGlmaWVyXCJdID0gN10gPSBcIk9iamVjdElkZW50aWZpZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVXRmOFN0cmluZ1wiXSA9IDhdID0gXCJVdGY4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJtcFN0cmluZ1wiXSA9IDldID0gXCJCbXBTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVW5pdmVyc2FsU3RyaW5nXCJdID0gMTBdID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVtZXJpY1N0cmluZ1wiXSA9IDExXSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJQcmludGFibGVTdHJpbmdcIl0gPSAxMl0gPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUZWxldGV4U3RyaW5nXCJdID0gMTNdID0gXCJUZWxldGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpZGVvdGV4U3RyaW5nXCJdID0gMTRdID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJQTVTdHJpbmdcIl0gPSAxNV0gPSBcIklBNVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHcmFwaGljU3RyaW5nXCJdID0gMTZdID0gXCJHcmFwaGljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpc2libGVTdHJpbmdcIl0gPSAxN10gPSBcIlZpc2libGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbFN0cmluZ1wiXSA9IDE4XSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJDaGFyYWN0ZXJTdHJpbmdcIl0gPSAxOV0gPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVVENUaW1lXCJdID0gMjBdID0gXCJVVENUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxpemVkVGltZVwiXSA9IDIxXSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRBVEVcIl0gPSAyMl0gPSBcIkRBVEVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGltZU9mRGF5XCJdID0gMjNdID0gXCJUaW1lT2ZEYXlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRGF0ZVRpbWVcIl0gPSAyNF0gPSBcIkRhdGVUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkR1cmF0aW9uXCJdID0gMjVdID0gXCJEdXJhdGlvblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUSU1FXCJdID0gMjZdID0gXCJUSU1FXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bGxcIl0gPSAyN10gPSBcIk51bGxcIjtcbn0pKEFzblByb3BUeXBlcyB8fCAoQXNuUHJvcFR5cGVzID0ge30pKTtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIEJpdFN0cmluZyB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zLCB1bnVzZWRCaXRzID0gMCkge1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAwO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZSBvZiAncGFyYW1zJyBhcmd1bWVudCBmb3IgQml0U3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5CaXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBhc24udmFsdWVCbG9jay51bnVzZWRCaXRzO1xuICAgICAgICB0aGlzLnZhbHVlID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLCB2YWx1ZUhleDogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHVpbnRBcnJheSkge1xuICAgICAgICAgICAgcmVzICs9IG9jdGV0LnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSh0aGlzLnVudXNlZEJpdHMpLnBhZFN0YXJ0KHRoaXMudW51c2VkQml0cywgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXMsIDIpO1xuICAgIH1cbiAgICBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBiaXRzID0gdmFsdWUudG9TdHJpbmcoMik7XG4gICAgICAgIGNvbnN0IG9jdGV0U2l6ZSA9IChiaXRzLmxlbmd0aCArIDcpID4+IDM7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IChvY3RldFNpemUgPDwgMykgLSBiaXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb2N0ZXRzID0gbmV3IFVpbnQ4QXJyYXkob2N0ZXRTaXplKTtcbiAgICAgICAgYml0cyA9IGJpdHMucGFkU3RhcnQob2N0ZXRTaXplIDw8IDMsIFwiMFwiKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgb2N0ZXRTaXplKSB7XG4gICAgICAgICAgICBvY3RldHNbaW5kZXhdID0gcGFyc2VJbnQoYml0cy5zbGljZShpbmRleCA8PCAzLCAoaW5kZXggPDwgMykgKyA4KSwgMik7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBvY3RldHMuYnVmZmVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIE9jdGV0U3RyaW5nIHtcbiAgICBnZXQgYnl0ZUxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGdldCBieXRlT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheShwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuT2N0ZXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIE9jdGV0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdGhpcy5idWZmZXIgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9iaXRfc3RyaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vY3RldF9zdHJpbmdcIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IE9jdGV0U3RyaW5nIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCBjb25zdCBBc25BbnlDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gbnVsbCA6IHZhbHVlLnZhbHVlQmVmb3JlRGVjb2RlVmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGFzbjFqcy5mcm9tQkVSKHZhbHVlKTtcbiAgICAgICAgaWYgKHNjaGVtYS5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzY2hlbWEucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hLnJlc3VsdDtcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA+PSA0XG4gICAgICAgID8gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpXG4gICAgICAgIDogdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZTogK3ZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25FbnVtZXJhdGVkQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkVudW1lcmF0ZWQoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQmlnSW50Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9CaWdJbnQoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBhc24xanMuSW50ZWdlci5mcm9tQmlnSW50KHZhbHVlKSxcbn07XG5leHBvcnQgY29uc3QgQXNuQml0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PYmplY3RJZGVudGlmaWVyKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJvb2xlYW5Db252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQm9vbGVhbih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkNvbnN0cnVjdGVkT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiBuZXcgT2N0ZXRTdHJpbmcodmFsdWUuZ2V0VmFsdWUoKSksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9BU04oKSxcbn07XG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoQXNuMVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBBc24xVHlwZSh7IHZhbHVlIH0pLFxuICAgIH07XG59XG5leHBvcnQgY29uc3QgQXNuVXRmOFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVXRmOFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQm1wU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5CbXBTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVW5pdmVyc2FsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5OdW1lcmljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlByaW50YWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVGVsZXRleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpZGVvdGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25JQTVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLklBNVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR3JhcGhpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlzaWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR2VuZXJhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5DaGFyYWN0ZXJTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVUQ1RpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLlVUQ1RpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkdlbmVyYWxpemVkVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk51bGxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKCkgPT4gbnVsbCxcbiAgICB0b0FTTjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgfSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENvbnZlcnRlcih0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkFueTpcbiAgICAgICAgICAgIHJldHVybiBBc25BbnlDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJpdFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CaXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJtcFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CbXBTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJvb2xlYW46XG4gICAgICAgICAgICByZXR1cm4gQXNuQm9vbGVhbkNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQ2hhcmFjdGVyU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuRW51bWVyYXRlZDpcbiAgICAgICAgICAgIHJldHVybiBBc25FbnVtZXJhdGVkQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxpemVkVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdyYXBoaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSUE1U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbklBNVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSW50ZWdlcjpcbiAgICAgICAgICAgIHJldHVybiBBc25JbnRlZ2VyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdWxsOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bGxDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bWVyaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcjpcbiAgICAgICAgICAgIHJldHVybiBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PY3RldFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25PY3RldFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuUHJpbnRhYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVGVsZXRleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VVENUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVUQ1RpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVuaXZlcnNhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlV0ZjhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVXRmOFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlkZW90ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpc2libGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gaXNDb252ZXJ0aWJsZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9BU04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tQVNOKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgJiYgXCJ0b0FTTlwiIGluIHRhcmdldCAmJiBcImZyb21BU05cIiBpbiB0YXJnZXQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVPZkFycmF5KHRhcmdldCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmICgoKF9hID0gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3RvLnByb3RvdHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cnVjdG9yKSA9PT0gQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1R5cGVPZkFycmF5KHByb3RvKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSB9IGZyb20gXCIuL2hlbHBlclwiO1xuZXhwb3J0IGNsYXNzIEFzblNjaGVtYVN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgaGFzKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5oYXModGFyZ2V0KTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCwgY2hlY2tTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgdGFyZ2V0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU2NoZW1hICYmICFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyBkb2Vzbid0IGNvbnRhaW4gQVNOLjEgc2NoZW1hLiBDYWxsICdBc25TY2hlbWFTdG9yYWdlLmNhY2hlJy5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjYWNoZSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuc2NoZW1hID0gdGhpcy5jcmVhdGUodGFyZ2V0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgICAgICB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsXG4gICAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IE9iamVjdC5hc3NpZ24oe30sIHNjaGVtYS5pdGVtcywgcGFyZW50U2NoZW1hLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjcmVhdGUodGFyZ2V0LCB1c2VOYW1lcykge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdXNlTmFtZXMgPyBrZXkgOiBcIlwiO1xuICAgICAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tpdGVtLnR5cGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgQVNOMSBjbGFzcyBieSBuYW1lICcke0FzbjFUeXBlTmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IEFzbjFUeXBlKHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGl0ZW0udHlwZSgpO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gaW5zdGFuY2UudG9TY2hlbWEobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVNjaGVtYSA9IHRoaXMuZ2V0KGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1TY2hlbWEudHlwZSA9PT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy5jcmVhdGUoaXRlbS50eXBlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSAhIWl0ZW0ub3B0aW9uYWwgfHwgaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZCA9PT0gXCJzZXRcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXRcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2VxdWVuY2U7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBhc24xanMuUmVwZWF0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5jb250ZXh0ICE9PSBudWxsICYmIGl0ZW0uY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuQ29uc3RydWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5QcmltaXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlKGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1JlcGVhdGVkID0gISFpdGVtLnJlcGVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gIWlzUmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0KGl0ZW0udHlwZSwgdHJ1ZSkuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJ2YWx1ZUJsb2NrXCIgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlIDogdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAhaXNSZXBlYXRlZCA/IG5hbWUgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQ2hvaWNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBU04xIHR5cGUgaW4gdXNlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0KHRhcmdldCwgc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQXNuU2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuZXhwb3J0IGNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgQXNuU2NoZW1hU3RvcmFnZSgpO1xuIiwgImltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY29uc3QgQXNuVHlwZSA9IChvcHRpb25zKSA9PiAodGFyZ2V0KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBvcHRpb25zKTtcbn07XG5leHBvcnQgY29uc3QgQXNuQ2hvaWNlVHlwZSA9ICgpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNldFR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXQsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuU2VxdWVuY2VUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuUHJvcCA9IChvcHRpb25zKSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhY29weU9wdGlvbnMuY29udmVydGVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIob3B0aW9ucy50eXBlKTtcbiAgICAgICAgaWYgKCFkZWZhdWx0Q29udmVydGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHByb3BlcnR5ICcke3Byb3BlcnR5S2V5fScgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb3B5T3B0aW9ucy5jb252ZXJ0ZXIgPSBkZWZhdWx0Q29udmVydGVyO1xuICAgIH1cbiAgICBzY2hlbWEuaXRlbXNbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XG59O1xuIiwgImV4cG9ydCBjbGFzcyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IFtdO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFfdmFsaWRhdGlvblwiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNUeXBlT2ZBcnJheSB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25QYXJzZXIge1xuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgYXNuMVBhcnNlZCA9IGFzbjFqcy5mcm9tQkVSKGRhdGEpO1xuICAgICAgICBpZiAoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhc24xUGFyc2VkLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5mcm9tQVNOKGFzbjFQYXJzZWQucmVzdWx0LCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFTTihhc24xU2NoZW1hLCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mcm9tQVNOKGFzbjFTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRTY2hlbWEgPSBzY2hlbWEuc2NoZW1hO1xuICAgICAgICAgICAgaWYgKGFzbjFTY2hlbWEuY29uc3RydWN0b3IgPT09IGFzbjFqcy5Db25zdHJ1Y3RlZCAmJiBzY2hlbWEudHlwZSAhPT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9IG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogYXNuMVNjaGVtYS5pZEJsb2NrLnRhZ051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNjaGVtYS5zY2hlbWEudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFzbjFTY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhc24xQ29tcGFyZWRTY2hlbWEgPSBhc24xanMuY29tcGFyZVNjaGVtYSh7fSwgYXNuMVNjaGVtYSwgdGFyZ2V0U2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghYXNuMUNvbXBhcmVkU2NoZW1hLnZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcihgRGF0YSBkb2VzIG5vdCBtYXRjaCB0byAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYS4gJHthc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgaWYgKGlzVHlwZU9mQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBhc24xU2NoZW1hLnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHNjaGVtYS5pdGVtVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihpdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBpdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFTY2hlbWFWYWx1ZSA9IGFzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFTY2hlbWFWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW1UeXBlID0gc2NoZW1hSXRlbS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbVR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gKF9hID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgc2NoZW1hSXRlbVR5cGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnRlciBpcyBlbXB0eVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBuZXcgQ29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gYXNuMVNjaGVtYVZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbUFzbiA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbUFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBjaGlsZCBpdGVtLiAke25ld0l0ZW1Bc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20odmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXNuMVNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBzY2hlbWFJdGVtVHlwZSgpLnRvU2NoZW1hKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW1UeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0ICcke0FzbjFUeXBlTmFtZX0nIGNsYXNzIGZyb20gYXNuMWpzIG1vZHVsZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgQXNuMVR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNvbnZlcnRlci5mcm9tQVNOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhc24xU2NoZW1hVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBsaXN0IG9mIGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgdmFsdWUgc2hvdWxkIGJlIGl0ZXJhYmxlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgc2NoZW1hSXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy5mcm9tQVNOKGFzbjFTY2hlbWFWYWx1ZSwgc2NoZW1hSXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnNjaGVtYXMucHVzaCh0YXJnZXQubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc0FycmF5RXF1YWwgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuU2VyaWFsaXplciB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIGFzbjFqcy5CYXNlQmxvY2spIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9CRVIoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvQVNOKG9iaikudG9CRVIoZmFsc2UpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BU04ob2JqKSB7XG4gICAgICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBpc0NvbnZlcnRpYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9BU04oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBPYmplY3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICBsZXQgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGlmIChzY2hlbWEuaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLml0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKHNjaGVtYS5pdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IGNvbnZlcnRlci50b0FTTihvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiB0aGlzLnRvQXNuSXRlbSh7IHR5cGU6IHNjaGVtYS5pdGVtVHlwZSB9LCBcIltdXCIsIHRhcmdldCwgbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3AgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAob2JqUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHx8IHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBvYmpQcm9wXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0eXBlb2Ygc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9ialByb3AgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQXJyYXlFcXVhbCh0aGlzLnNlcmlhbGl6ZShzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSksIHRoaXMuc2VyaWFsaXplKG9ialByb3ApKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFJdGVtID0gQXNuU2VyaWFsaXplci50b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS5jb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW0udHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZUhleCA9IGFzbjFJdGVtIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBhc24xSXRlbS52YWx1ZUJlZm9yZURlY29kZVZpZXcgOiBhc24xSXRlbS52YWx1ZUJsb2NrLnRvQkVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5QcmltaXRpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0udmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gYXNuMVZhbHVlLmNvbmNhdChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBhc25TY2hlbWE7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFWYWx1ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQubmFtZX0nIGhhcyB3cm9uZyBkYXRhLiBDaG9pY2UgY2Fubm90IGJlIGVtcHR5LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBhc24xVmFsdWVbMF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzblNjaGVtYTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCkge1xuICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaGVtYUl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IHNjaGVtYUl0ZW0uY29udmVydGVyO1xuICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2tleX0nIGRvZXNuJ3QgaGF2ZSBjb252ZXJ0ZXIgZm9yIHR5cGUgJHtBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbS50eXBlXX0gaW4gc2NoZW1hICcke3RhcmdldC5uYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBjb252ZXJ0ZXIudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gdGhpcy50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbjFJdGVtO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgQXNuQXJyYXkgZXh0ZW5kcyBBcnJheSB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMgPSBbXSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5pbXBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgY2xhc3MgQXNuQ29udmVydCB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgcmV0dXJuIEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG9iaik7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShkYXRhLCB0YXJnZXQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoZGF0YSlcbiAgICAgICAgICAgID8gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgIDogQXNuQ29udmVydC5zZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFzbiA9IGFzbjFqcy5mcm9tQkVSKGJ1Zik7XG4gICAgICAgIGlmIChhc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIEFTTi4xIGRhdGEuICR7YXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuLnJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IHsgQXNuUHJvcCwgQXNuVHlwZSwgQXNuQ2hvaWNlVHlwZSwgQXNuU2VxdWVuY2VUeXBlLCBBc25TZXRUeXBlIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0IHsgQXNuVHlwZVR5cGVzLCBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuZXhwb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5leHBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3RzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0XCI7XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJhc2U2NC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSA2NDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrLys9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChfYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmICghKGtleVVzYWdlcyAmJiBrZXlVc2FnZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXNhZ2VzIGNhbm5vdCBiZSBlbXB0eSB3aGVuIGNyZWF0aW5nIGEga2V5LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGxvd2VkVXNhZ2VzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcy5wcml2YXRlS2V5LmNvbmNhdCh0aGlzLnVzYWdlcy5wdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCBhbGxvd2VkVXNhZ2VzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImdlbmVyYXRlS2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1NpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tTaWduKGFsZ29yaXRobSwga2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25WZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KF9hbGdvcml0aG0sIF9rZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZW5jcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZXJpdmVCaXRzXCIgOiB2b2lkIDApO1xuICAgICAgICBpZiAobGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBJcyBub3QgbXVsdGlwbGUgb2YgOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoX2FsZ29yaXRobSwgX2Jhc2VLZXksIF9sZW5ndGgsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVyaXZlQml0c1wiKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KF9mb3JtYXQsIF9rZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgdGhpcy51c2FnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KF9mb3JtYXQsIF9rZXlEYXRhLCBfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiaW1wb3J0S2V5XCIpO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleVVzYWdlcyh1c2FnZXMsIGFsbG93ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkLmluZGV4T2YodXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5IHVzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBpZiAoa2V5VXNhZ2UgJiYga2V5LnVzYWdlcy5pbmRleE9mKGtleVVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihga2V5IGRvZXMgbm90IG1hdGNoIHRoYXQgb2Ygb3BlcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZFByb3BlcnR5KGRhdGEsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmICghKHByb3BOYW1lIGluIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBoYXNoOiBNdXN0IGJlIG9uZSBvZiAke2hhc2hBbGdvcml0aG1zLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleUZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZvcm1hdDogSXMgaW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAnandrJywgJ3JhdycsICdzcGtpJywgb3IgJ3BrY3M4J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKSB7XG4gICAgICAgIGlmICgha2V5RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBiZSBlbXB0eSBvbiBlbXB0eSBvbiBrZXkgaW1wb3J0aW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNKV0soa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpzb25XZWJUb2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEFycmF5QnVmZmVyVmlldyBvciBBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlRGF0YShkYXRhKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIDEyOCwgMTkyLCBvciAyNTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DQkNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DTUFDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ1RSXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImNvdW50ZXJcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5jb3VudGVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5jb3VudGVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb3VudGVyOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uY291bnRlci5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtRUNCXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUdDTVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInRhZ0xlbmd0aFwiIGluIGFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgIGFsZ29yaXRobS50YWdMZW5ndGggPSAxMjg7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0udGFnTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwidGFnTGVuZ3RoOiBNdXN0IGJlIG9uZSBvZiAzMiwgNjQsIDk2LCAxMDQsIDExMiwgMTIwIG9yIDEyOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtS1dcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaXY6IE11c3QgaGF2ZSBsZW5ndGggJHt0aGlzLml2U2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCAhPT0gdGhpcy5rZXlTaXplQml0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBhbGdvcml0aG0ubGVuZ3RoOiBNdXN0IGJlICR7dGhpcy5rZXlTaXplQml0c31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggJSA4XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA8IDI1NlxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPiAxNjM4NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBtb2R1bHVzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzIGFuZCA+PSAyNTYgYW5kIDw9IDE2Mzg0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBU1NBLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtUFNTXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRMZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLnNhbHRMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0TGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5zYWx0TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzYWx0TGVuZ3RoOiBNdXN0IGJlIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1PQUVQXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsXG4gICAgICAgICAgICAmJiAhKGFsZ29yaXRobS5sYWJlbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0ubGFiZWwpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxhYmVsOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHRpY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJuYW1lZEN1cnZlXCIpO1xuICAgICAgICB0aGlzLmNoZWNrTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgfVxuICAgIGNoZWNrTmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hbWVkQ3VydmVzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBuYW1lZEN1cnZlOiBNdXN0IGJlIG9uZSBvZiAke3RoaXMubmFtZWRDdXJ2ZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDRFNBXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jb25zdCBLRVlfVFlQRVMgPSBbXCJzZWNyZXRcIiwgXCJwcml2YXRlXCIsIFwicHVibGljXCJdO1xuY2xhc3MgQ3J5cHRvS2V5IHtcbiAgICBzdGF0aWMgY3JlYXRlKGFsZ29yaXRobSwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgdGhpcygpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkudHlwZSA9IHR5cGU7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNLZXlUeXBlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEtFWV9UWVBFUy5pbmRleE9mKGRhdGEpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9LZXlcIjtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREhcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpYyBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy50eXBlICE9PSBcInB1YmxpY1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIHB1YmxpYyBrZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMuYWxnb3JpdGhtLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBwdWJsaWM6IElzIG5vdCAke3RoaXMubmFtZX0ga2V5YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RILUVTXCI7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJYMjU1MTlcIiwgXCJYNDQ4XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkRFNBXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiRWQyNTUxOVwiLCBcIkVkNDQ4XCJdO1xuICAgIH1cbn1cblxubGV0IE9iamVjdElkZW50aWZpZXIgPSBjbGFzcyBPYmplY3RJZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIgfSlcbl0sIE9iamVjdElkZW50aWZpZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5PYmplY3RJZGVudGlmaWVyID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIE9iamVjdElkZW50aWZpZXIpO1xuXG5jbGFzcyBBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcixcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwiYWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLkFueSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHJpdmF0ZUtleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQdWJsaWNLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnB1YmxpY0tleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKG5ldyBVaW50OEFycmF5KHZhbHVlKSksXG59O1xuXG5jb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuICEobmV3IFVpbnQ4QXJyYXkodmFsdWVIZXgpWzBdKVxuICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4LnNsaWNlKDEpXG4gICAgICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpWzBdID4gMTI3XG4gICAgICAgICAgICA/IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzBdKS5idWZmZXIsIHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleCB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIsXG4gIEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyXG59KTtcblxuY2xhc3MgUnNhUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcml2YXRlRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmNvZWZmaWNpZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUV4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicWlcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImNvZWZmaWNpZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm90aGVyUHJpbWVJbmZvc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5cbmxldCBFY1B1YmxpY0tleSA9IGNsYXNzIEVjUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gIT09IDB4MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcIldyb25nIEVDUG9pbnQuIEN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyBvbmx5IFVuY29tcHJlc3NlZCAoMHgwNCkgcG9pbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlLnNsaWNlKDEpKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKSxcbiAgICAgICAgICAgIHk6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCArIHNpemUsIG9mZnNldCArIHNpemUgKyBzaXplKSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFwieVwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ5OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgY29uc3QgeSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLnkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzB4MDRdKS5idWZmZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWNQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWNQdWJsaWNLZXkpO1xuXG5jbGFzcyBFY1ByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJkXCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIGlmIChcInhcIiBpbiBqc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgICAgIHB1YmxpY0tleS5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgIGNvbnN0IGFzbiA9IEFzblNlcmlhbGl6ZXIudG9BU04ocHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlSGV4XCIgaW4gYXNuLnZhbHVlQmxvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHt9O1xuICAgICAgICBqd2suZCA9IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgaWYgKHRoaXMucHVibGljS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGp3aywgbmV3IEVjUHVibGljS2V5KHRoaXMucHVibGljS2V5KS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAwLCB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4KTtcbiAgICAgICAgcmV0dXJuIChieXRlc1swXSA9PT0gMClcbiAgICAgICAgICAgID8gYnl0ZXMuYnVmZmVyLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGJ5dGVzLmJ1ZmZlcjtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSA+IDEyNykge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShieXRlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnNldChieXRlcywgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiBuZXdWYWx1ZS5idWZmZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyXG59KTtcblxuY2xhc3MgRWNVdGlscyB7XG4gICAgc3RhdGljIGRlY29kZVBvaW50KGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKCh2aWV3Lmxlbmd0aCA9PT0gMCkgfHwgKHZpZXdbMF0gIT09IDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHVuY29tcHJlc3NlZCBwb2ludCBmb3JtYXQgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSAodmlldy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGlmIChuICE9PSAoTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgZG9lcyBub3QgbWF0Y2ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4YiA9IHZpZXcuc2xpY2UoMSwgbiArIDEpO1xuICAgICAgICBjb25zdCB5YiA9IHZpZXcuc2xpY2UobiArIDEsIG4gKyAxICsgbik7XG4gICAgICAgIHJldHVybiB7IHg6IHhiLCB5OiB5YiB9O1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlUG9pbnQocG9pbnQsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgICAgICBpZiAocG9pbnQueC5ieXRlTGVuZ3RoICE9PSBzaXplIHx8IHBvaW50LnkuYnl0ZUxlbmd0aCAhPT0gc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWCxZIGNvb3JkaW5hdGVzIGRvbid0IG1hdGNoIHBvaW50IHNpemUgY3JpdGVyaWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueCk7XG4gICAgICAgIGNvbnN0IHkgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LnkpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMiArIDEpO1xuICAgICAgICByZXNbMF0gPSA0O1xuICAgICAgICByZXMuc2V0KHgsIDEpO1xuICAgICAgICByZXMuc2V0KHksIHNpemUgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldFNpemUocG9pbnRTaXplKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCByID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucik7XG4gICAgICAgIGNvbnN0IHMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5zKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQociwgc2l6ZSkpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQocywgc2l6ZSksIHNpemUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjb2RlU2lnbmF0dXJlKGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IChzaXplICogMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzaXplIG9mIHRoZSBzaWduYXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHZpZXcuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHMgPSB2aWV3LnNsaWNlKHNpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogdGhpcy50cmltU3RhcnQociksXG4gICAgICAgICAgICBzOiB0aGlzLnRyaW1TdGFydChzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHRyaW1TdGFydChkYXRhKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKChpIDwgZGF0YS5sZW5ndGggLSAxKSAmJiAoZGF0YVtpXSA9PT0gMCkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoaSwgZGF0YS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkU3RhcnQoZGF0YSwgc2l6ZSkge1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICByZXMuc2V0KGRhdGEsIHNpemUgLSBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY0RzYVNpZ25hdHVyZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5zID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVdlYkNyeXB0b1NpZ25hdHVyZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwb2ludFNpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBFY1V0aWxzLmRlY29kZVNpZ25hdHVyZSh2YWx1ZSwgcG9pbnRTaXplICogOCk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IEVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnMpO1xuICAgICAgICByZXR1cm4gZWNTaWduYXR1cmU7XG4gICAgfVxuICAgIHRvV2ViQ3J5cHRvU2lnbmF0dXJlKHBvaW50U2l6ZSkge1xuICAgICAgICBwb2ludFNpemUgIT09IG51bGwgJiYgcG9pbnRTaXplICE9PSB2b2lkIDAgPyBwb2ludFNpemUgOiAocG9pbnRTaXplID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKSAqIDgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFY1V0aWxzLmVuY29kZVNpZ25hdHVyZSh0aGlzLCBwb2ludFNpemUpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlLmJ1ZmZlcjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwiclwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInNcIiwgdm9pZCAwKTtcblxuY2xhc3MgT25lQXN5bW1ldHJpY0tleSBleHRlbmRzIFByaXZhdGVLZXlJbmZvIHtcbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAxLCBpbXBsaWNpdDogdHJ1ZSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIE9uZUFzeW1tZXRyaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5sZXQgRWRQcml2YXRlS2V5ID0gY2xhc3MgRWRQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHtcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVkUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFByaXZhdGVLZXkpO1xuXG5sZXQgRWRQdWJsaWNLZXkgPSBjbGFzcyBFZFB1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJ4XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIng6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIEVkUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQdWJsaWNLZXkpO1xuXG5sZXQgQ3VydmVQcml2YXRlS2V5ID0gY2xhc3MgQ3VydmVQcml2YXRlS2V5IHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pLFxuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkucHJvdG90eXBlLCBcImRcIiwgdm9pZCAwKTtcbkN1cnZlUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkpO1xuXG5jb25zdCBpZFNlY3AyNTZyMSA9IFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiO1xuY29uc3QgaWRFbGxpcHRpY0N1cnZlID0gXCIxLjMuMTMyLjBcIjtcbmNvbnN0IGlkU2VjcDM4NHIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNGA7XG5jb25zdCBpZFNlY3A1MjFyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzVgO1xuY29uc3QgaWRTZWNwMjU2azEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjEwYDtcbmNvbnN0IGlkVmVyc2lvbk9uZSA9IFwiMS4zLjM2LjMuMy4yLjguMS4xXCI7XG5jb25zdCBpZEJyYWlucG9vbFAxNjByMSA9IGAke2lkVmVyc2lvbk9uZX0uMWA7XG5jb25zdCBpZEJyYWlucG9vbFAxNjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMmA7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uM2A7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uNGA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjRyMSA9IGAke2lkVmVyc2lvbk9uZX0uNWA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjR0MSA9IGAke2lkVmVyc2lvbk9uZX0uNmA7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZyMSA9IGAke2lkVmVyc2lvbk9uZX0uN2A7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZ0MSA9IGAke2lkVmVyc2lvbk9uZX0uOGA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjByMSA9IGAke2lkVmVyc2lvbk9uZX0uOWA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTBgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjExYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMmA7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTNgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEydDEgPSBgJHtpZFZlcnNpb25PbmV9LjE0YDtcbmNvbnN0IGlkWDI1NTE5ID0gXCIxLjMuMTAxLjExMFwiO1xuY29uc3QgaWRYNDQ4ID0gXCIxLjMuMTAxLjExMVwiO1xuY29uc3QgaWRFZDI1NTE5ID0gXCIxLjMuMTAxLjExMlwiO1xuY29uc3QgaWRFZDQ0OCA9IFwiMS4zLjEwMS4xMTNcIjtcblxudmFyIGluZGV4JDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWxnb3JpdGhtSWRlbnRpZmllcjogQWxnb3JpdGhtSWRlbnRpZmllcixcbiAgZ2V0IEN1cnZlUHJpdmF0ZUtleSAoKSB7IHJldHVybiBDdXJ2ZVByaXZhdGVLZXk7IH0sXG4gIEVjRHNhU2lnbmF0dXJlOiBFY0RzYVNpZ25hdHVyZSxcbiAgRWNQcml2YXRlS2V5OiBFY1ByaXZhdGVLZXksXG4gIGdldCBFY1B1YmxpY0tleSAoKSB7IHJldHVybiBFY1B1YmxpY0tleTsgfSxcbiAgZ2V0IEVkUHJpdmF0ZUtleSAoKSB7IHJldHVybiBFZFByaXZhdGVLZXk7IH0sXG4gIGdldCBFZFB1YmxpY0tleSAoKSB7IHJldHVybiBFZFB1YmxpY0tleTsgfSxcbiAgZ2V0IE9iamVjdElkZW50aWZpZXIgKCkgeyByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjsgfSxcbiAgT25lQXN5bW1ldHJpY0tleTogT25lQXN5bW1ldHJpY0tleSxcbiAgUHJpdmF0ZUtleUluZm86IFByaXZhdGVLZXlJbmZvLFxuICBQdWJsaWNLZXlJbmZvOiBQdWJsaWNLZXlJbmZvLFxuICBSc2FQcml2YXRlS2V5OiBSc2FQcml2YXRlS2V5LFxuICBSc2FQdWJsaWNLZXk6IFJzYVB1YmxpY0tleSxcbiAgY29udmVydGVyczogaW5kZXgkMixcbiAgaWRCcmFpbnBvb2xQMTYwcjE6IGlkQnJhaW5wb29sUDE2MHIxLFxuICBpZEJyYWlucG9vbFAxNjB0MTogaWRCcmFpbnBvb2xQMTYwdDEsXG4gIGlkQnJhaW5wb29sUDE5MnIxOiBpZEJyYWlucG9vbFAxOTJyMSxcbiAgaWRCcmFpbnBvb2xQMTkydDE6IGlkQnJhaW5wb29sUDE5MnQxLFxuICBpZEJyYWlucG9vbFAyMjRyMTogaWRCcmFpbnBvb2xQMjI0cjEsXG4gIGlkQnJhaW5wb29sUDIyNHQxOiBpZEJyYWlucG9vbFAyMjR0MSxcbiAgaWRCcmFpbnBvb2xQMjU2cjE6IGlkQnJhaW5wb29sUDI1NnIxLFxuICBpZEJyYWlucG9vbFAyNTZ0MTogaWRCcmFpbnBvb2xQMjU2dDEsXG4gIGlkQnJhaW5wb29sUDMyMHIxOiBpZEJyYWlucG9vbFAzMjByMSxcbiAgaWRCcmFpbnBvb2xQMzIwdDE6IGlkQnJhaW5wb29sUDMyMHQxLFxuICBpZEJyYWlucG9vbFAzODRyMTogaWRCcmFpbnBvb2xQMzg0cjEsXG4gIGlkQnJhaW5wb29sUDM4NHQxOiBpZEJyYWlucG9vbFAzODR0MSxcbiAgaWRCcmFpbnBvb2xQNTEycjE6IGlkQnJhaW5wb29sUDUxMnIxLFxuICBpZEJyYWlucG9vbFA1MTJ0MTogaWRCcmFpbnBvb2xQNTEydDEsXG4gIGlkRWQyNTUxOTogaWRFZDI1NTE5LFxuICBpZEVkNDQ4OiBpZEVkNDQ4LFxuICBpZEVsbGlwdGljQ3VydmU6IGlkRWxsaXB0aWNDdXJ2ZSxcbiAgaWRTZWNwMjU2azE6IGlkU2VjcDI1NmsxLFxuICBpZFNlY3AyNTZyMTogaWRTZWNwMjU2cjEsXG4gIGlkU2VjcDM4NHIxOiBpZFNlY3AzODRyMSxcbiAgaWRTZWNwNTIxcjE6IGlkU2VjcDUyMXIxLFxuICBpZFZlcnNpb25PbmU6IGlkVmVyc2lvbk9uZSxcbiAgaWRYMjU1MTk6IGlkWDI1NTE5LFxuICBpZFg0NDg6IGlkWDQ0OFxufSk7XG5cbmNsYXNzIEVjQ3VydmVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHN0YXRpYyByZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IG9pZCA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCk7XG4gICAgICAgIG9pZC52YWx1ZSA9IGl0ZW0uaWQ7XG4gICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKG9pZCk7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmaW5kKG5hbWVPcklkKSB7XG4gICAgICAgIG5hbWVPcklkID0gbmFtZU9ySWQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQgfHwgaXRlbS5pZC50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0KG5hbWVPcklkKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZmluZChuYW1lT3JJZCk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEVDIG5hbWVkIGN1cnZlICcke25hbWVPcklkfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkVjQ3VydmVzLml0ZW1zID0gW107XG5FY0N1cnZlcy5uYW1lcyA9IFtdO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMjU2XCIsIGlkOiBpZFNlY3AyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMzg0XCIsIGlkOiBpZFNlY3AzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtNTIxXCIsIGlkOiBpZFNlY3A1MjFyMSwgc2l6ZTogNTIxIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIkstMjU2XCIsIGlkOiBpZFNlY3AyNTZrMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwcjEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHQxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnIxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJyMSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTkydDEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHIxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHQxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjR0MSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnQxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjByMSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwdDEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzODR0MSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQNTEycjEsIHNpemU6IDUxMiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnQxLCBzaXplOiA1MTIgfSk7XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJITUFDXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBnZXREZWZhdWx0TGVuZ3RoKGFsZ05hbWUpIHtcbiAgICAgICAgc3dpdGNoIChhbGdOYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhbGdvcml0aG0gbmFtZSAnJHthbGdOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICBpZiAoXCJsZW5ndGhcIiBpbiBhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibGVuZ3RoOiBOdW1iZXIgaXMgb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUEJLREYyXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5zYWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5zYWx0KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdGVyYXRpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5pdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBsZXNzIHRoYW4gMVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhLREZcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLnNhbHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaW5mb1wiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLmluZm8pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IHsgbGVuZ3RoOiB0aGlzLmRlZmF1bHRMZW5ndGgsIC4uLmFyZ3NbMF0gfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFsZ29yaXRobS5sZW5ndGggfHwgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbmVnYXRpdmVcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTEyOFwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAxNjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTI1NlwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAzMjtcbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byB7XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9cIjtcbiAgICB9XG4gICAgcmFuZG9tVVVJRCgpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgICAgIGJbNl0gPSAoYls2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICAgICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgICAgICBjb25zdCB1dWlkID0gQ29udmVydC5Ub0hleChiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYCR7dXVpZC5zdWJzdHJpbmcoMCwgOCl9LSR7dXVpZC5zdWJzdHJpbmcoOCwgMTIpfS0ke3V1aWQuc3Vic3RyaW5nKDEyLCAxNil9LSR7dXVpZC5zdWJzdHJpbmcoMTYsIDIwKX0tJHt1dWlkLnN1YnN0cmluZygyMCl9YDtcbiAgICB9XG59XG5cbmNsYXNzIFByb3ZpZGVyU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXQocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtc1twcm92aWRlci5uYW1lLnRvTG93ZXJDYXNlKCldID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIHJlbW92ZUF0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldChhbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQobmFtZSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgYWxnb3JpdGhtcy5wdXNoKHByb3ZpZGVyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGdvcml0aG1zLnNvcnQoKTtcbiAgICB9XG59XG5cbmNsYXNzIFN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gbmV3IFByb3ZpZGVyU3RvcmFnZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNIYXNoZWRBbGdvcml0aG0oZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICYmIFwibmFtZVwiIGluIGRhdGFcbiAgICAgICAgICAgICYmIFwiaGFzaFwiIGluIGRhdGFcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJTdWJ0bGVDcnlwdG9cIjtcbiAgICB9XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZGlnZXN0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGlnZXN0KHByZXBhcmVkQWxnb3JpdGhtLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdlbmVyYXRlS2V5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcInNpZ25cIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuc2lnbih7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNCwgXCJ2ZXJpZnlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRTaWduYXR1cmUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnZlcmlmeSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWRTaWduYXR1cmUsIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImVuY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZWNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVyaXZlQml0c1wiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgbGVuZ3RoLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERlcml2ZWRLZXlUeXBlID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGRlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgaW1wb3J0UHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkRGVyaXZlZEtleVR5cGUubmFtZSk7XG4gICAgICAgIGltcG9ydFByb3ZpZGVyLmNoZWNrRGVyaXZlZEtleVBhcmFtcyhwcmVwYXJlZERlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBwcm92aWRlci5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgZGVyaXZlZEJpdHMgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUubGVuZ3RoIHx8IDUxMiwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KFwicmF3XCIsIGRlcml2ZWRCaXRzLCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZXhwb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXksIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihrZXkuYWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGltcG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImltcG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBpZiAoW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdLmluZGV4T2YoZm9ybWF0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmltcG9ydEtleShmb3JtYXQsIHByZXBhcmVkRGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFrZXlEYXRhLmt0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBJcyBub3QgSlNPTlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWREc2FQcm92aWRlciwgRWxsaXB0aWNQcm92aWRlciwgSGtkZlByb3ZpZGVyLCBIbWFjUHJvdmlkZXIsIEp3a1V0aWxzLCBPcGVyYXRpb25FcnJvciwgUGJrZGYyUHJvdmlkZXIsIFBlbUNvbnZlcnRlciwgUHJvdmlkZXJDcnlwdG8sIFByb3ZpZGVyU3RvcmFnZSwgUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBSc2FPYWVwUHJvdmlkZXIsIFJzYVByb3ZpZGVyLCBSc2FQc3NQcm92aWRlciwgUnNhU3NhUHJvdmlkZXIsIFNoYWtlMTI4UHJvdmlkZXIsIFNoYWtlMjU2UHJvdmlkZXIsIFNoYWtlUHJvdmlkZXIsIFN1YnRsZUNyeXB0bywgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3J5cHRvX19kZWZhdWx0IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyIH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSB7IG5hbWU6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMuYWxnID0gXCJcIjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZXh0XCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuQm9vbGVhbiwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiZXh0cmFjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrZXlfb3BzXCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCByZXBlYXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwidXNhZ2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImt0eVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiYWxnXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICB9XG59XG5cbmNsYXNzIEFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBBZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNUUmA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUdDTWA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9S1dgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DTUFDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q01BQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUVDQmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgQWVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEFlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBBZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlci5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGVuYyk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlci5mcm9tKFwiQTZBNkE2QTZBNkE2QTZBNlwiLCBcImhleFwiKTtcblxuY29uc3Qga2V5U3RvcmFnZSA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDcnlwdG9LZXkoa2V5KSB7XG4gICAgY29uc3QgcmVzID0ga2V5U3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIkNhbm5vdCBnZXQgQ3J5cHRvS2V5IGZyb20gc2VjdXJlIHN0b3JhZ2VcIik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzZXRDcnlwdG9LZXkodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBjb3JlLkNyeXB0b0tleS5jcmVhdGUodmFsdWUuYWxnb3JpdGhtLCB2YWx1ZS50eXBlLCB2YWx1ZS5leHRyYWN0YWJsZSwgdmFsdWUudXNhZ2VzKTtcbiAgICBPYmplY3QuZnJlZXplKGtleSk7XG4gICAga2V5U3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NiY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgemVybyA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIuYWxsb2MoYnVmZmVyLmxlbmd0aCk7XG4gICAgY29uc3QgbGFzdCA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7XG4gICAgICAgIHNoaWZ0ZWRbaW5kZXhdID0gYnVmZmVyW2luZGV4XSA8PCAxO1xuICAgICAgICBpZiAoYnVmZmVyW2luZGV4ICsgMV0gJiAweDgwKSB7XG4gICAgICAgICAgICBzaGlmdGVkW2luZGV4XSArPSAweDAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNoaWZ0ZWRbbGFzdF0gPSBidWZmZXJbbGFzdF0gPDwgMTtcbiAgICByZXR1cm4gc2hpZnRlZDtcbn1cbmZ1bmN0aW9uIHhvcihhLCBiKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlci5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBtZXNzYWdlLmxlbmd0aDtcbiAgICBibG9jay5maWxsKDApO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgYmxvY2tbZW5kIC0gc3RhcnRdID0gMHg4MDtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVN1YmtleXMoa2V5KSB7XG4gICAgY29uc3QgbCA9IGFlcyhrZXksIHplcm8pO1xuICAgIGxldCBzdWJrZXkxID0gYml0U2hpZnRMZWZ0KGwpO1xuICAgIGlmIChsWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkxID0geG9yKHN1YmtleTEsIHJiKTtcbiAgICB9XG4gICAgbGV0IHN1YmtleTIgPSBiaXRTaGlmdExlZnQoc3Via2V5MSk7XG4gICAgaWYgKHN1YmtleTFbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTIgPSB4b3Ioc3Via2V5MiwgcmIpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJrZXkxLCBzdWJrZXkyIH07XG59XG5mdW5jdGlvbiBhZXNDbWFjKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IHN1YmtleXMgPSBnZW5lcmF0ZVN1YmtleXMoa2V5KTtcbiAgICBsZXQgYmxvY2tDb3VudCA9IE1hdGguY2VpbChtZXNzYWdlLmxlbmd0aCAvIGJsb2NrU2l6ZSk7XG4gICAgbGV0IGxhc3RCbG9ja0NvbXBsZXRlRmxhZztcbiAgICBsZXQgbGFzdEJsb2NrO1xuICAgIGlmIChibG9ja0NvdW50ID09PSAwKSB7XG4gICAgICAgIGJsb2NrQ291bnQgPSAxO1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IChtZXNzYWdlLmxlbmd0aCAlIGJsb2NrU2l6ZSA9PT0gMCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gYmxvY2tDb3VudCAtIDE7XG4gICAgaWYgKGxhc3RCbG9ja0NvbXBsZXRlRmxhZykge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTIpO1xuICAgIH1cbiAgICBsZXQgeCA9IHplcm87XG4gICAgbGV0IHk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3RCbG9ja0luZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHkgPSB4b3IoeCwgZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGluZGV4KSk7XG4gICAgICAgIHggPSBhZXMoa2V5LCB5KTtcbiAgICB9XG4gICAgeSA9IHhvcihsYXN0QmxvY2ssIHgpO1xuICAgIHJldHVybiBhZXMoa2V5LCB5KTtcbn1cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ21hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWVzQ21hYyhnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIuZnJvbShzaWduYXR1cmUyKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0N0clByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0djbVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzS3dQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNFY2JQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBERVMtQ0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDNERVMtQ0JDYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBEZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgRGVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvX19kZWZhdWx0LnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogRGVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhbGdvcml0aG0ucHVibGljRXhwb25lbnQpLFxuICAgICAgICBdKS5yZWFkSW50MzJCRSgwKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwicnNhXCIsIHtcbiAgICAgICAgICAgIG1vZHVsdXNMZW5ndGg6IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoLFxuICAgICAgICAgICAgcHVibGljRXhwb25lbnQsXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB2ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG9fX2RlZmF1bHQucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0b19fZGVmYXVsdC5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvX19kZWZhdWx0LnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0b19fZGVmYXVsdC5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoICE9PSBrZXlTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGtjczAgPSBjcnlwdG9fX2RlZmF1bHQucHJpdmF0ZURlY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTFcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGE1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwiZWNcIiwge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSksXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGVjU2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBlY1NpZ25hdHVyZVJhdyk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShiYXNlS2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3QgZWNkaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVFQ0RIKGNyeXB0b0FsZyk7XG4gICAgICAgIGNvbnN0IGFzblByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYmFzZUtleS5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBhc25FY1ByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYXNuUHJpdmF0ZUtleS5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KEJ1ZmZlci5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKG5hbWVkQ3VydmUpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBhc25LZXkudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG9fX2RlZmF1bHQuc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG9fX2RlZmF1bHQudmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYWxnb3JpdGhtLnB1YmxpYy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBiYXNlS2V5LmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvX19kZWZhdWx0LmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgZ2V0IHJlcXVpcmVkICd4JyBmaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleUluZm8ucHVibGljS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleS5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleSksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuRWRDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWRDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZERzYVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUucmVwbGFjZSgvXmVkL2ksIFwiRWRcIiksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoRXNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWRDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG9fX2RlZmF1bHQucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIuZnJvbShzYWx0KSwgYWxnb3JpdGhtLml0ZXJhdGlvbnMsIGxlbmd0aCA+PiAzLCBoYXNoLCAoZXJyLCBkZXJpdmVkQml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRlcml2ZWRCaXRzKS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyYXdcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IFBia2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBobWFjLmNvbXBhcmUoQnVmZmVyLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhwYXJhbXMsIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gcGFyYW1zLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaGFzaExlbmd0aCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2gpLmRpZ2VzdCgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGxlbmd0aCAvIDg7XG4gICAgICAgIGNvbnN0IGluZm8gPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLmluZm8pO1xuICAgICAgICBjb25zdCBQUksgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhoYXNoLCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLnNhbHQpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBbQnVmZmVyLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyLmZyb20oW2ldKV0pKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheS5idWZmZXIsIGFycmF5LmJ5dGVPZmZzZXQsIGFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgICBjcnlwdG9fX2RlZmF1bHQucmFuZG9tRmlsbFN5bmMoYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQ3J5cHRvIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbi8qKlxuICogUHJvcGVydHktS2V5c1xuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqL1xuXG5leHBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTdGF0ZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3N0YXRlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnN0YW5jZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2luc3RhbmNlXCIpO1xuIiwgImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwgImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCAiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsICJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsICJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQmFzZSB9O1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZnJvbSB3aGljaCB0aGUgbW9zdCBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIGJlc2lkZXMgYSBgdG9TdHJpbmdgIHdoaWNoIHJldHVybnMgdGhlIGpzb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuICogYWxzbyBhIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuXG4gKlxuICogVGhlcmVmb3IgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBtZXRob2QgYCBbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KWAgd2hpY2ggcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3RcbiAqIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBAc2VlIFtodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2VdKGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2UpXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgd2hpY2ggcmV0dXJucyBhIHVuaXF1ZSBzeW1ib2wuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICogICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2xhc3Mgd2FzIGZvcm1lcmx5IGNhbGxlZCBPYmplY3QuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBCYXNlIGV4dGVuZHMgT2JqZWN0IHtcblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gdGhhdFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdCkge1xuXHRcdGlmIChcblx0XHRcdHRoYXQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdCA9PT0gbnVsbCB8fFxuXHRcdFx0KHR5cGVvZiB0aGF0ICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0ICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhhdENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoYXQpO1xuXHRcdGlmIChcblx0XHRcdHRoYXRDbGFzcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHR0aGF0Q2xhc3MgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdENsYXNzICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0Q2xhc3MgIT09IFwiZnVuY3Rpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbdGhhdENsYXNzXSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHRoaXMgY2FsbCB0aGUgc3RhdGljIG1ldGhvZCBvZiB0aGUgc3VwZXIgY2xhc3MsIGlmIHRoZXJlIGlzIG9uZVxuXHRcdHJldHVybiBzdXBlcltTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpO1xuXHR9XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBnZXR0ZXIgYGluc3RhbmNlU3ltYm9sYCBhbmQgaWYgdGhlIHZhbHVlIG9mIHRoaXMgZ2V0dGVyIGlzIGVxdWFsIHRvIHRoZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxhbnl8Ym9vbGVhbn1cbiAqIEBzaW5jZSAyLjEuMFxuICovXG5mdW5jdGlvbiBjaGVja0luc3RhbmNlU3ltYm9sKG9iaikge1xuXHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG8gPSBvYmo/LmNvbnN0cnVjdG9yO1xuXHRpZiAoXG5cdFx0cHJvdG8gPT09IHVuZGVmaW5lZCB8fFxuXHRcdHByb3RvID09PSBudWxsIHx8XG5cdFx0KHR5cGVvZiBwcm90byAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcHJvdG8gIT09IFwiZnVuY3Rpb25cIilcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb3RvLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG5cdH1cblxuXHRjb25zdCBzeW1ib2wgPSBwcm90b1tpbnN0YW5jZVN5bWJvbF07XG5cdGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvYmouX19wcm90b19fKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmouX19wcm90b19fKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzeW1ib2wgPT09IHRoaXNbaW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdGFjayB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLlF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgU3RhY2sgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0cHVzaCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayBhbmQgcmV0dXJuc1xuXHQgKiB0aGF0IG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gaXMgdGhlIHN0YWNrIGVtcHR5XG5cdCAqIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cG9wKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5wb3AoKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQYXRoZmluZGVyLCBERUxJTUlURVIsIFdJTERDQVJEIH07XG5cbi8qKlxuICogcGF0aCBzZXBhcmF0b3JcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCIuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5cbi8qKlxuICogUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBwYXRoZmluZGVyLCB2YWx1ZXMgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gZnJvbSBhbiBvYmplY3QgY29uc3RydWN0LlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe1xuICogYToge1xuICogICAgIGI6IHtcbiAqICAgICAgICAgZjogW1xuICogICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICogICAgICAgICAgICAgfVxuICogICAgICAgICBdLFxuICogICAgIH1cbiAqIH1cbiAqIH0pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50IG9yIGhhcyB0aGUgd3JvbmcgdHlwZSwgYSBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgRXJyb3JcbiAqIGBgYFxuICpcbiAqIFRoZSBgUGF0aGZpbmRlci5leGlzdHMoKWAgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYWNjZXNzIHRvIHRoZSBwYXRoIGlzIHBvc3NpYmxlLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmV4aXN0cyhcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBwYXRoZmluZGVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgb2JqZWN0IHN0cnVjdHVyZXMuIHRvIGRvIHRoaXMsIHRoZSBgUGF0aGZpbmRlci5zZXRWaWEoKWAgbWV0aG9kIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIG9iaiA9IHt9O1xuICogbmV3IFBhdGhmaW5kZXIob2JqKS5zZXRWaWEoJ2EuYi4wLmMnLCB0cnVlKTsgLy8gXHUyMUE2IHthOntiOlt7Yzp0cnVlfV19fVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0xLm1qc1xuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0yLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFBhdGhmaW5kZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHBhcmFtZXRlciBpcyBhIHNpbXBsZSB0eXBlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmplY3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGEgc2ltcGxlIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IFdJTERDQVJEO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB3aWxkY2FyZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lsZGNhcmRcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzZXRXaWxkQ2FyZCh3aWxkY2FyZCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHdpbGRjYXJkKTtcblx0XHR0aGlzLndpbGRDYXJkID0gd2lsZGNhcmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGdldFZpYShwYXRoKSB7XG5cdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS42LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGRlbGV0ZVZpYShwYXRoKSB7XG5cdFx0ZGVsZXRlVmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge2Jvb2x9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKi9cblx0ZXhpc3RzKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHRydWUpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0cGF0aCA9IHBhdGguam9pbihERUxJTUlURVIpO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0KSkge1xuXHRcdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHZhbHVlLCBwYXRoLCBjaGVjaykpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBrZXkgPSBwYXRoLnNwbGl0KERFTElNSVRFUikuc2hpZnQoKTtcblx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgcGF0aCwgY2hlY2spKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIFtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSBbYm9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm5zIHsqfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc1N0cmluZyhwYXRoKSkge1xuXHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblxuXHRpZiAoY3VycmVudCA9PT0gdGhpcy53aWxkQ2FyZCkge1xuXHRcdHJldHVybiBpdGVyYXRlLmNhbGwodGhpcywgc3ViamVjdCwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGxldCBhbmNob3I7XG5cdFx0aWYgKHN1YmplY3QgaW5zdGFuY2VvZiBNYXAgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3QuZ2V0KGN1cnJlbnQpO1xuXHRcdH0gZWxzZSBpZiAoc3ViamVjdCBpbnN0YW5jZW9mIFNldCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gWy4uLnN1YmplY3RdPy5bY3VycmVudF07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcIik7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9XG5cblx0XHRpZiAoaXNPYmplY3QoYW5jaG9yKSB8fCBpc0FycmF5KGFuY2hvcikpIHtcblx0XHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBhbmNob3IsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHRcdH1cblxuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmQgKCR7cGFydHMuam9pbihERUxJTUlURVIpfSlgKTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2sgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCksXG5cdFx0XHRcdGN1cnJlbnQsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoY3VycmVudCkgJiYgZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFwidW5rbm93biB2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5jaG9yO1xuXHR9XG5cblx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHN1YmplY3R9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBlcnJvcjogcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5XCIpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3VicGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXHRsZXQgY3VycmVudCA9IHN1YnBhdGg7XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHN0YWNrLnB1c2goY3VycmVudCk7XG5cdFx0cGFydHMucG9wKCk7XG5cdFx0Y3VycmVudCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRcdGlmIChjdXJyZW50ID09PSBcIlwiKSBicmVhaztcblx0fVxuXG5cdHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0Y3VycmVudCA9IHN0YWNrLnBvcCgpO1xuXHRcdGxldCBvYmogPSB7fTtcblxuXHRcdGlmICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0XHRjb25zdCBuID0gc3RhY2sucGVlaygpLnNwbGl0KERFTElNSVRFUikucG9wKCk7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKHBhcnNlSW50KG4pKSkge1xuXHRcdFx0XHRvYmogPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCBvYmopO1xuXHR9XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3VicGF0aCk7XG5cblx0aWYgKCEoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkpIHtcblx0XHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZW9mIHN1YmplY3R9YCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gYXNzaWduUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdGlmICghb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRvYmplY3Rba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHR9XG5cblx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVsZXRlVmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YnBhdGgpO1xuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRhbmNob3IuZGVsZXRlKGxhc3QpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXAgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0IHx8XG5cdFx0KHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZilcblx0KSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0l0ZXJhYmxlLCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5cbmV4cG9ydCB7IFRva2VuTGlzdCB9O1xuXG4vKipcbiAqIEEgYFRva2VuTGlzdGAgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdG9rZW5zIChpbmRpdmlkdWFsIGNoYXJhY3RlciBzdHJpbmdzIHN1Y2ggYXMgY3NzIGNsYXNzZXMgaW4gYW4gYXR0cmlidXRlIHN0cmluZykuXG4gKlxuICogVGhlIGBUb2tlbkxpc3RgIG9mZmVycyB2YXJpb3VzIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHZhbHVlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWRkLCByZW1vdmUgb3IgcmVwbGFjZSBhIGNsYXNzIGluIGEgQ1NTIGxpc3QuXG4gKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBbaXRlcmF0aW9uIHByb3RvY29sXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzKS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTEubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIFRva2VuTGlzdCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gaW5pdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5pdCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cblx0XHRpZiAodHlwZW9mIGluaXQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMuYWRkKGluaXQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJdGVyYXRvciBwcm90b2NvbFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7U3ltYm9sLml0ZXJhdG9yfVxuXHQgKi9cblx0Z2V0SXRlcmF0b3IoKSB7XG5cdFx0cmV0dXJuIHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt7bmV4dDogKChmdW5jdGlvbigpOiAoe3ZhbHVlOiAqLCBkb25lOiBib29sZWFufSkpfCopfX1cblx0ICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdC8vIFVzZSBhIG5ldyBpbmRleCBmb3IgZWFjaCBpdGVyYXRvci4gVGhpcyBtYWtlcyBtdWx0aXBsZVxuXHRcdC8vIGl0ZXJhdGlvbnMgb3ZlciB0aGUgaXRlcmFibGUgc2FmZSBmb3Igbm9uLXRyaXZpYWwgY2FzZXMsXG5cdFx0Ly8gc3VjaCBhcyB1c2Ugb2YgYnJlYWsgb3IgbmVzdGVkIGxvb3Bpbmcgb3ZlciB0aGUgc2FtZSBpdGVyYWJsZS5cblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IGVudHJpZXM/LltpbmRleCsrXSwgZG9uZTogZmFsc2UgfTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4geyBkb25lOiB0cnVlIH07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgY29udGFpbnMgdG9rZW4sIG90aGVyd2lzZSBmYWxzZVxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTIubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnModmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdG9rZW5zXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMy5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMudG9rZW5zLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0b2tlblxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTQubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHJlbW92ZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXBsYWNlcyBhIHRva2VuIHdpdGggYSBuZXcgdG9rZW4uXG5cdCAqXG5cdCAqIGlmIHRoZSBwYXNzZWQgdG9rZW4gZXhpc3RzLCBpdCBpcyByZXBsYWNlZCB3aXRoIG5ld1Rva2VuIGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqIGlmIHRoZSB0b2tlbiBkb2VzIG5vdCBleGlzdCwgbmV3VG9rZW4gaXMgbm90IHNldCBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1Rva2VuXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRyZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuZXdUb2tlbik7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHRcdGNvbnN0IGkgPSBhLmluZGV4T2YodG9rZW4pO1xuXHRcdGlmIChpID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRhLnNwbGljZShpLCAxLCBuZXdUb2tlbik7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5hZGQoYSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuIGZyb20gc3RyaW5nLiBJZiB0b2tlbiBkb2Vzbid0IGV4aXN0IGl0J3MgYWRkZWQuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNS5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHRvZ2dsZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dG9nZ2xlVmFsdWUuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybnMge2FycmF5fVxuXHQgKi9cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdH1cblxuXHQvKipcblx0ICogZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpdGggZWFjaCB2YWx1ZSBvZiB0aGUgc2V0XG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpcy50b2tlbnMuZm9yRWFjaChjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgaW5kaXZpZHVhbCB0b2tlbnMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgY2hhcmFjdGVyXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzKCkuam9pbihcIiBcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHRva2VuXG4gKiBAcmV0dXJucyB7dG9nZ2xlVmFsdWV9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZSh0b2tlbikge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9rZW5MaXN0KSlcblx0XHR0aHJvdyBFcnJvcihcIm11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcIik7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dG9rZW4gPSB0b2tlbi50cmltKCk7XG5cdGlmICh0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdHRoaXMucmVtb3ZlKHRva2VuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0aGlzLmFkZCh0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHtcblx0REVGQVVMVF9USEVNRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX09QVElPTlMsXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfVEhFTUVfUFJFRklYLFxuXHRBVFRSSUJVVEVfVEhFTUVfTkFNRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5ELFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUsXG5cdEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9WQUxVRSxcblx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFRBR19TQ1JJUFQsXG5cdFRBR19TVFlMRSxcblx0VEFHX0xJTkssXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfVFJBTlNMQVRFLFxuXHRBVFRSSUJVVEVfVEFCSU5ERVgsXG5cdEFUVFJJQlVURV9TUEVMTENIRUNLLFxuXHRBVFRSSUJVVEVfU0xPVCxcblx0QVRUUklCVVRFX1BBUlQsXG5cdEFUVFJJQlVURV9MQU5HLFxuXHRBVFRSSUJVVEVfSVRFTVRZUEUsXG5cdEFUVFJJQlVURV9JVEVNU0NPUEUsXG5cdEFUVFJJQlVURV9JVEVNUkVGLFxuXHRBVFRSSUJVVEVfSVRFTUlELFxuXHRBVFRSSUJVVEVfSVRFTVBST1AsXG5cdEFUVFJJQlVURV9JUyxcblx0QVRUUklCVVRFX0lOUFVUTU9ERSxcblx0QVRUUklCVVRFX0FDQ0VTU0tFWSxcblx0QVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFLFxuXHRBVFRSSUJVVEVfQVVUT0ZPQ1VTLFxuXHRBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFLFxuXHRBVFRSSUJVVEVfRElSLFxuXHRBVFRSSUJVVEVfRFJBR0dBQkxFLFxuXHRBVFRSSUJVVEVfRU5URVJLRVlISU5ULFxuXHRBVFRSSUJVVEVfRVhQT1JUUEFSVFMsXG5cdEFUVFJJQlVURV9ISURERU4sXG5cdG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxufTtcblxuLyoqXG4gKiBkZWZhdWx0IHRoZW1lXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfVEhFTUUgPSBcIm1vbnN0ZXJcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9uc2A7XG5cbi8qKlxuICogVGhpcyBpcyBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgc2NyaXB0IGhvc3QgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TQ1JJUFRfSE9TVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2NyaXB0LWhvc3RgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIG9wdGlvbnMgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTklUX0NBTExCQUNLID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbml0LWNhbGxiYWNrYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgaW5pdENvbnRyb2xDYWxsYmFja05hbWUgPSBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2A7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9OQU1FID0gYCR7QVRUUklCVVRFX1RIRU1FX1BSRUZJWH1uYW1lYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hdHRyaWJ1dGVzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXBsYWNlYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluc2VydGA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVNT1ZFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJpbmRgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9VUERBVEVSX0JJTkR9LXR5cGVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10ZW1wbGF0ZS1wcmVmaXhgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUk9MRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cm9sZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFID0gXCJ2YWx1ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PQkpFQ1RMSU5LID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vYmplY3RsaW5rYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBvYmplY3RVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TVFlMRSA9IFwic3R5bGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX0xJTksgPSBcImxpbmtcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0NMQVNTID0gXCJjbGFzc1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVElUTEUgPSBcInRpdGxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hSRUYgPSBcImhyZWZcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RZUEUgPSBcInR5cGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFJBTlNMQVRFID0gXCJ0cmFuc2xhdGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RBQklOREVYID0gXCJ0YWJpbmRleFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU0xPVCA9IFwic2xvdFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUEFSVCA9IFwicGFydFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVRZUEUgPSBcIml0ZW10eXBlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNU0NPUEUgPSBcIml0ZW1zY29wZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTUlEID0gXCJpdGVtaWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1QUk9QID0gXCJpdGVtcHJvcFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlBVVE1PREUgPSBcImlucHV0bW9kZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQUNDRVNTS0VZID0gXCJhY2Nlc3NrZXlcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0ZPQ1VTID0gXCJhdXRvZm9jdXNcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSA9IFwiY29udGVudGVkaXRhYmxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRFJBR0dBQkxFID0gXCJkcmFnZ2FibGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VOVEVSS0VZSElOVCA9IFwiZW50ZXJrZXloaW50XCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSElEREVOID0gXCJoaWRkZW5cIjtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVTeW1ib2wsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1xuXHRmaW5kQ2xvc2VzdE9iamVjdExpbmssXG5cdGFkZFRvT2JqZWN0TGluayxcblx0cmVtb3ZlT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0dG9nZ2xlQXR0cmlidXRlVG9rZW4sXG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcblx0Y29udGFpbnNBdHRyaWJ1dGVUb2tlbixcblx0cmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuXHRjbGVhckF0dHJpYnV0ZVRva2Vucyxcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0ZmluZENsb3Nlc3RCeUNsYXNzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNsb3Nlc3Qgb2JqZWN0IGxpbmsgb2YgYSBub2RlXG4gKlxuICogaWYgYSBub2RlIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgb2JqZWN0IGxpbmssIGEgcmVjdXJzaXZlIHNlYXJjaCB1cHdhcmRzIGlzIHBlcmZvcm1lZCB1bnRpbCB0aGUgY29ycmVzcG9uZGluZ1xuICogb2JqZWN0IGxpbmsgaXMgZm91bmQsIG9yIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gc3ltYm9sXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZWxlbWVudFtzeW1ib2xdID0gbmV3IFNldCgpO1xuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZWxlbWVudFtzeW1ib2xdLmFkZChvYmplY3QpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGVsZW1lbnRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihcblx0XHRlbGVtZW50LFxuXHRcdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRcdHN5bWJvbC50b1N0cmluZygpLFxuXHQpO1xufVxuXG4vKipcbiAqIFRoZSBPYmplY3RMaW5rIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBvYmplY3RzIHRvIEhUTUxFbGVtZW50cy4gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgc2V0IHVuZGVyIGEgdW5pcXVlXG4gKiBzeW1ib2wgYW5kIGNhbiBiZSByZWFkIHZpYSBhbiBpdGVyYXRvciB7QHNlZSB7QGxpbmsgZ2V0TGlua2VkT2JqZWN0c319LlxuICpcbiAqIEluIGFkZGl0aW9uLCBlbGVtZW50cyB3aXRoIGFuIG9iamVjdExpbmsgcmVjZWl2ZSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb2JqZWN0bGlua2AuXG4gKlxuICogV2l0aCB0aGUgbWV0aG9kICB7QHNlZSB7QGxpbmsgYWRkVG9PYmplY3RMaW5rfX0gdGhlIG9iamVjdHMgY2FuIGJlIGFkZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtJdGVyYXRvcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3Igc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3IgJHtzeW1ib2wudG9TdHJpbmcoKX1gKTtcblx0fVxuXG5cdHJldHVybiBlbGVtZW50Py5bc3ltYm9sXVtTeW1ib2wuaXRlcmF0b3JdKCk7XG59XG5cbi8qKlxuICogV2l0aCB0aGlzIG1ldGhvZCB0b2tlbnMgaW4gYW4gYXR0cmlidXRlIGNhbiBiZSBzd2l0Y2hlZCBvbiBvciBvZmYuIEZvciBleGFtcGxlLCBjbGFzc2VzIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIGluIHRoZSBlbGVtZW50cyBjbGFzcyBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5hZGQodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZW1vdmUgdG9rZW5zIGZyb20gYW4gYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZW1vdmUodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYXR0cmlidXRlIGhhcyBhIHRva2VuLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGZyb21cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIGZyb20sIHRvKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhmcm9tKTtcblx0dmFsaWRhdGVTdHJpbmcodG8pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVwbGFjZShmcm9tLCB0bykudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGtleSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIik7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBkYXRhLW15LWF0dHJpYnV0ZT1cIjJcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqXG4gKiAvLyBpZiBhIHZhbHVlIGlzIHNwZWNpZmllZCwgZm9yIGV4YW1wbGUgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBuYW1lIGFuZCB0aGUgdmFsdWUgYXJlIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJycpOyAgLy8gXHUyMUE2IHVuZGVmaW5lZFxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcyJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY2xhc3M9XCJteWNsYXNzXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRDbG9zZXN0QnlDbGFzc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzJztcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcygpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucyh2YWxpZGF0ZVN0cmluZyhjbGFzc05hbWUpKSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGAuJHtjbGFzc05hbWV9YCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQge1xuXHRnZXREb2N1bWVudCxcblx0Z2V0V2luZG93LFxuXHRnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyxcblx0ZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzLFxuXHRnZXRDb250YWluaW5nRG9jdW1lbnQsXG5cdGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cyxcblx0ZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsKCk/LltcImRvY3VtZW50XCJdO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIGdldEdsb2JhbCgpWyd3aW5kb3cnXT13aW5kb3c7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRHbG9iYWwoKT8uW1wid2luZG93XCJdO1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gd2luZG93O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKGh0bWwpIHtcblx0dmFsaWRhdGVTdHJpbmcoaHRtbCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcblx0dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcblxuXHRyZXR1cm4gdGVtcGxhdGUuY29udGVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBJRCwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHNpbmNlIDMuMjkuMFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudCwgdGFyZ2V0SWQpIHtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyB0aGUgdGFyZ2V0IElEXG5cdGlmIChlbGVtZW50LmlkID09PSB0YXJnZXRJZCkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgc2VhcmNoIHdpdGhpbiB0aGUgbWFpbiBkb2N1bWVudFxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhyb290Tm9kZS5ob3N0LCB0YXJnZXRJZCk7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCB0YXJnZXRJZCk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqIHdpdGggYSBzcGVjaWZpZWQgc2VsZWN0b3IsIGNvbnNpZGVyaW5nIGJvdGggbm9ybWFsIERPTSBhbmQgc2hhZG93IERPTS5cbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgZmluZGluZyBhIHBhcmVudCBlbGVtZW50IHdpdGggYSBzcGVjaWZpYyBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fFNoYWRvd1Jvb3R9IGVsZW1lbnQgLSBUaGUgc3RhcnRpbmcgZWxlbWVudCBvciBzaGFkb3cgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzaW5jZSAzLjU1LjBcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG5cdGlmICghZWxlbWVudCB8fCAhc2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFNlYXJjaCB3aXRoaW4gdGhlIGN1cnJlbnQgZWxlbWVudCdzIHNoYWRvdyByb290LCBpZiBpdCBleGlzdHNcblx0aWYgKGVsZW1lbnQuc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgaW5zaWRlIGEgc2hhZG93IHJvb3QsIHNlYXJjaCBpdHMgaG9zdCdzIGFuY2VzdG9yc1xuXHRjb25zdCByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcblx0aWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMocm9vdE5vZGUuaG9zdCwgc2VsZWN0b3IpO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhlIGN1cnJlbnQgZWxlbWVudCdzIHBhcmVudFxuXHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgc2VsZWN0b3IpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH1cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB7XG5cdGxldCBjdXJyZW50Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblx0bGV0IGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cblx0d2hpbGUgKFxuXHRcdGN1cnJlbnRQYXJlbnQgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX05PREUgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnRSb290ICYmIGN1cnJlbnRSb290LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBjdXJyZW50UGFyZW50LnNoYWRvd1Jvb3Q7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50UGFyZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGN1cnJlbnRSb290ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREVcblx0XHQpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5ob3N0O1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gbnVsbDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudFBhcmVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHsqfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc2luY2UgMy4zNi4wXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KSB7XG5cdGlmIChcblx0XHQhZWxlbWVudCB8fFxuXHRcdCEoXG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnRcblx0XHQpXG5cdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdHJldHVybiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHx8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqIEBzaW5jZSA0LjAuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cygpIHtcblx0Y29uc3QgY3VzdG9tRWxlbWVudFRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKVxuXHRcdC5tYXAoKHRhZykgPT4gdGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcblx0XHQuZmlsdGVyKCh0YWdOYW1lKSA9PiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNsb25lIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uLCBvYmplY3RzIGNhbiBiZSBjbG9uZWQuXG4gKiBUaGUgZW50aXJlIG9iamVjdCB0cmVlIGlzIHJ1biB0aHJvdWdoLlxuICpcbiAqIFByb3h5LCBFbGVtZW50LCBIVE1MRG9jdW1lbnQgYW5kIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VzIGFyZSBub3QgY2xvbmVkLlxuICogR2xvYmFsIG9iamVjdHMgc3VjaCBhcyB3aW5kb3dzIGFyZSBhbHNvIG5vdCBjbG9uZWQsXG4gKlxuICogSWYgYW4gb2JqZWN0IGhhcyBhIG1ldGhvZCBgZ2V0Q2xvbmUoKWAsIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcmV0dXJucyB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsb25lT2JqZWN0KG9iaikge1xuXHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXG5cdGNvbnN0IGZrdCA9IG9iaj8uW1wiY29uc3RydWN0b3JcIl07XG5cblx0LyoqIE9iamVjdCBoYXMgY2xvbmUgbWV0aG9kICovXG5cdGlmICh0eXBlT2YoZmt0KSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgcHJvdG90eXBlID0gZmt0Py5wcm90b3R5cGU7XG5cdFx0aWYgKHR5cGVvZiBwcm90b3R5cGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiZ2V0Q2xvbmVcIikgJiZcblx0XHRcdFx0dHlwZU9mKG9iai5nZXRDbG9uZSkgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvYmouZ2V0Q2xvbmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgY29weSA9IHt9O1xuXHRpZiAoXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5jYWxsID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0Y29weSA9IG5ldyBvYmouY29uc3RydWN0b3IoKTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuXHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmpba2V5XSkpIHtcblx0XHRcdGNvcHlba2V5XSA9IG9ialtrZXldO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29weVtrZXldID0gY2xvbmUob2JqW2tleV0pO1xuXHR9XG5cblx0cmV0dXJuIGNvcHk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vbG9jYWxlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgbG9jYWxlU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBsYW5ndWFnZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5sYW5ndWFnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHJlZ2lvbigpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5yZWdpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBzY3JpcHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uc2NyaXB0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgdmFyaWFudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0udmFyaWFudHM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBleHRsYW5nKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmV4dGxhbmc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBwcml2YXRlVXNlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnByaXZhdGVWYWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5sb2NhbGVTdHJpbmd9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nOiBsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGVNYXB9XG5cdCAqL1xuXHRnZXRNYXAoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbcHJvcGVydGllc1N5bWJvbF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYWxlTWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFuZ3VhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY3JpcHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWdpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YXJpYW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dGxhbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlVXNlXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBsb2NhbCBhY2NvcmRpbmcgdG8gcmZjNDY0NiBzdGFuZGFyZFxuICpcbiAqIExpbWl0YXRpb25zOiBUaGUgcmVnZXggY2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2YXJpYW50cyBvciBwcml2YXRlLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQge2NyZWF0ZUxvY2FsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvaTE4bi9sb2NhbGUubWpzJztcbiAqIGNyZWF0ZUxvY2FsZSgpXG4gKiBgYGBcbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqICAgVGhlIHN5bnRheCBvZiB0aGUgbGFuZ3VhZ2UgdGFnIGluIEFCTkYgW1JGQzQyMzRdIGlzOlxuICpcbiAqICAgTGFuZ3VhZ2UtVGFnICA9IGxhbmd0YWdcbiAqICAgICAgICAgICAgICAgICAvIHByaXZhdGV1c2UgICAgICAgICAgICAgOyBwcml2YXRlIHVzZSB0YWdcbiAqICAgICAgICAgICAgICAgICAvIGdyYW5kZmF0aGVyZWQgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvbnNcbiAqXG4gKiAgIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiAgIGxhbmd1YWdlICAgICAgPSAoMiozQUxQSEEgWyBleHRsYW5nIF0pIDsgc2hvcnRlc3QgSVNPIDYzOSBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyA0QUxQSEEgICAgICAgICAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqICAgICAgICAgICAgICAgICAvIDUqOEFMUEhBICAgICAgICAgICAgICAgOyByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZ1xuICpcbiAqICAgZXh0bGFuZyAgICAgICA9ICozKFwiLVwiIDNBTFBIQSkgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKlxuICogICBzY3JpcHQgICAgICAgID0gNEFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAxNTkyNCBjb2RlXG4gKlxuICogICByZWdpb24gICAgICAgID0gMkFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAzMTY2IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDNESUdJVCAgICAgICAgICAgICAgICAgOyBVTiBNLjQ5IGNvZGVcbiAqXG4gKiAgIHZhcmlhbnQgICAgICAgPSA1KjhhbHBoYW51bSAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCB2YXJpYW50c1xuICogICAgICAgICAgICAgICAgIC8gKERJR0lUIDNhbHBoYW51bSlcbiAqXG4gKiAgIGV4dGVuc2lvbiAgICAgPSBzaW5nbGV0b24gMSooXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqXG4gKiAgIHNpbmdsZXRvbiAgICAgPSAleDQxLTU3IC8gJXg1OS01QSAvICV4NjEtNzcgLyAleDc5LTdBIC8gRElHSVRcbiAqICAgICAgICAgICAgICAgICA7IFwiYVwiLVwid1wiIC8gXCJ5XCItXCJ6XCIgLyBcIkFcIi1cIldcIiAvIFwiWVwiLVwiWlwiIC8gXCIwXCItXCI5XCJcbiAqICAgICAgICAgICAgICAgICA7IFNpbmdsZSBsZXR0ZXJzOiB4L1ggaXMgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgdXNlXG4gKlxuICogICBwcml2YXRldXNlICAgID0gKFwieFwiL1wiWFwiKSAxKihcIi1cIiAoMSo4YWxwaGFudW0pKVxuICpcbiAqICAgZ3JhbmRmYXRoZXJlZCA9IDEqM0FMUEhBIDEqMihcIi1cIiAoMio4YWxwaGFudW0pKVxuICogICAgICAgICAgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvblxuICogICAgICAgICAgICAgICAgICAgOyBOb3RlOiBpIGlzIHRoZSBvbmx5IHNpbmdsZXRvblxuICogICAgICAgICAgICAgICAgICAgOyB0aGF0IHN0YXJ0cyBhIGdyYW5kZmF0aGVyZWQgdGFnXG4gKlxuICogICBhbHBoYW51bSAgICAgID0gKEFMUEhBIC8gRElHSVQpICAgICAgIDsgbGV0dGVycyBhbmQgbnVtYmVyc1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgRmlndXJlIDE6IExhbmd1YWdlIFRhZyBBQk5GXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJucyB7TG9jYWxlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VMb2NhbGUobG9jYWxlKSB7XG5cdGxvY2FsZSA9IHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG5cblx0bGV0IGxhbmd1YWdlO1xuXHRsZXQgcmVnaW9uO1xuXHRsZXQgdmFyaWFudHM7XG5cdGxldCBwYXJ0cztcblx0bGV0IHNjcmlwdDtcblx0bGV0IGV4dGxhbmc7XG5cdGNvbnN0IHJlZ2V4UmVndWxhciA9XG5cdFx0XCIoYXJ0LWxvamJhbnxjZWwtZ2F1bGlzaHxuby1ib2t8bm8tbnlufHpoLWd1b3l1fHpoLWhha2thfHpoLW1pbnx6aC1taW4tbmFufHpoLXhpYW5nKVwiO1xuXHRjb25zdCByZWdleElycmVndWxhciA9XG5cdFx0XCIoZW4tR0Itb2VkfGktYW1pfGktYm5ufGktZGVmYXVsdHxpLWVub2NoaWFufGktaGFrfGkta2xpbmdvbnxpLWx1eHxpLW1pbmdvfGktbmF2YWpvfGktcHdufGktdGFvfGktdGF5fGktdHN1fHNnbi1CRS1GUnxzZ24tQkUtTkx8c2duLUNILURFKVwiO1xuXHRjb25zdCByZWdleEdyYW5kZmF0aGVyZWQgPSBgKCR7cmVnZXhJcnJlZ3VsYXJ9fCR7cmVnZXhSZWd1bGFyfSlgO1xuXHRjb25zdCByZWdleFByaXZhdGVVc2UgPSBcIih4KC1bQS1aYS16MC05XXsxLDh9KSspXCI7XG5cdGNvbnN0IHJlZ2V4U2luZ2xldG9uID0gXCJbMC05QS1XWS1aYS13eS16XVwiO1xuXHRjb25zdCByZWdleEV4dGVuc2lvbiA9IGAoJHtyZWdleFNpbmdsZXRvbn0oLVtBLVphLXowLTldezIsOH0pKylgO1xuXHRjb25zdCByZWdleFZhcmlhbnQgPSBcIihbQS1aYS16MC05XXs1LDh9fFswLTldW0EtWmEtejAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4UmVnaW9uID0gXCIoW0EtWmEtel17Mn18WzAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4U2NyaXB0ID0gXCIoW0EtWmEtel17NH0pXCI7XG5cdGNvbnN0IHJlZ2V4RXh0bGFuZyA9IFwiKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSlcIjtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZSA9IGAoKFtBLVphLXpdezIsM30oLSR7cmVnZXhFeHRsYW5nfSk/KXxbQS1aYS16XXs0fXxbQS1aYS16XXs1LDh9KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3RhZyA9IGAoJHtyZWdleExhbmd1YWdlfSgtJHtyZWdleFNjcmlwdH0pPygtJHtyZWdleFJlZ2lvbn0pPygtJHtyZWdleFZhcmlhbnR9KSooLSR7cmVnZXhFeHRlbnNpb259KSooLSR7cmVnZXhQcml2YXRlVXNlfSk/KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2VUYWcgPSBgXigke3JlZ2V4R3JhbmRmYXRoZXJlZH18JHtyZWdleExhbmd0YWd9fCR7cmVnZXhQcml2YXRlVXNlfSkkYDtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4TGFuZ3VhZ2VUYWcpO1xuXHRsZXQgbWF0Y2g7XG5cblx0aWYgKChtYXRjaCA9IHJlZ2V4LmV4ZWMobG9jYWxlKSkgIT09IG51bGwpIHtcblx0XHRpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuXHRcdFx0cmVnZXgubGFzdEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoID09PSB1bmRlZmluZWQgfHwgbWF0Y2ggPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdH1cblxuXHRpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdGxhbmd1YWdlID0gbWF0Y2hbNl07XG5cblx0XHRwYXJ0cyA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKTtcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBwYXJ0c1swXTtcblx0XHRcdGV4dGxhbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2hbMTRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZWdpb24gPSBtYXRjaFsxNF07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRzY3JpcHQgPSBtYXRjaFsxMl07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTZdICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXJpYW50cyA9IG1hdGNoWzE2XTtcblx0fVxuXG5cdHJldHVybiBuZXcgTG9jYWxlKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vaTE4bi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSBcImVuXCI7XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gcmVhZCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBzZXQgYnkgdGhlIGRvY3VtZW50LlxuICogRm9yIHRoaXMgdGhlIGF0dHJpYnV0ZSBgbGFuZ2AgaW4gdGhlIGh0bWwgdGFnIGlzIHJlYWQuIElmIG5vIGF0dHJpYnV0ZSBpcyBzZXQsIGBlbmAgaXMgdXNlZCBhcyBkZWZhdWx0LlxuICogQWx0ZXJuYXRpdmVseSwgdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIGJyb3dzZXIgaXMgdXNlZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8aHRtbCBsYW5nPVwiZW5cIj5cbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIGBnZXRMb2NhbGVPZkRvY3VtZW50KClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR8Kn1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlc1xuICovXG5jb25zdCBnZXROYXZpZ2F0b3JMYW5ndWFnZSA9ICgpID0+IHtcblx0Y29uc3QgbmF2aWdhdG9yID0gZ2V0R2xvYmFsT2JqZWN0KFwibmF2aWdhdG9yXCIpO1xuXHRpZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eShcImxhbmd1YWdlXCIpKSB7XG5cdFx0Y29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cdFx0aWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gXCJzdHJpbmdcIiAmJiBsYW5ndWFnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbGFuZ3VhZ2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yPy5sYW5ndWFnZXM7XG5cdGlmIChBcnJheS5pc0FycmF5KGxhbmd1YWdlcykgJiYgbGFuZ3VhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGFuZ3VhZ2VzWzBdO1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UganVzdCBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBvcmRlciBzdGF5cyB0aGUgc2FtZS5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuNi4wIHRoZXJlIGlzIHRoZSBuZXcgUmFuZG9tSUQuIHRoaXMgSUQgY2xhc3MgaXMgY29udGludW91cyBmcm9tIG5vdyBvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIHdpdGggb3B0aW9ucyBmcm9tIHdoaWNoIHNvbWUgbW9uc3RlciBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWN0dWFsbHkgb25seSB1c2VkIGFzIGEgYmFzZSBjbGFzcy5cbiAqXG4gKiBDbGFzc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3B0aW9ucyBjYW4gYmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoaXMgY2xhc3MuXG4gKiBEZXJpdmVkIGNsYXNzZXMgYWxtb3N0IGFsd2F5cyBvdmVycmlkZSB0aGUgYGRlZmF1bGAgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuVHlwZXMuQmFzZX0gd2l0aCB7QGxpbmsgTW9uc3Rlci5UeXBlcy5lcXVpcFdpdGhJbnRlcm5hbH0gaW5zdGVhZC5cbiAqL1xuY2xhc3MgQmFzZVdpdGhPcHRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMsIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGdldHRlciBwcm92aWRlcyB0aGUgb3B0aW9ucy4gRGVyaXZlZCBjbGFzc2VzIG92ZXJ3cml0ZVxuXHQgKiB0aGlzIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuIEl0IGlzIGdvb2Qga2FybWEgdG8gYWx3YXlzIGluY2x1ZGVcblx0ICogdGhlIHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MuXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICAgbXlrZXk6IHRydWVcblx0ICogICAgIH0pO1xuXHQgKiB9XG5cdCAqXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXSkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGFkZFRvT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgUHJvdmlkZXIsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy45LjBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmtcIixcbik7XG5cbi8qKlxuICogQSBwcm92aWRlciBtYWtlcyBhIHRyYW5zbGF0aW9uIG9iamVjdCBhdmFpbGFibGUuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBQcm92aWRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3Byb3ZpZGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEByZXR1cm4ge1Byb3ZpZGVyfVxuXHQgKi9cblx0YXNzaWduVG9FbGVtZW50KGxvY2FsZSwgZWxlbWVudCkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICghKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkxvY2FsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbnMobG9jYWxlKS50aGVuKChvYmopID0+IHtcblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0aWYgKGhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0Y29uc3Qgb2JqZWN0cyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbyBvZiBvYmplY3RzKSB7XG5cdFx0XHRcdFx0aWYgKG8gaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHRyYW5zbGF0aW9ucyA9IG87XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUcmFuc2xhdGlvbnNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKG9iaik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCwgb2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TGlua2VkT2JqZWN0cywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9IGZyb20gXCIuL3Byb3ZpZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2xhdGlvbnMsIGdldERvY3VtZW50VHJhbnNsYXRpb25zIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGNsYXNzIHlvdSBjYW4gbWFuYWdlIHRyYW5zbGF0aW9ucyBhbmQgYWNjZXNzIHRoZSBrZXlzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIFRyYW5zbGF0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobG9jYWxlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpIHtcblx0XHRcdHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IHBhcnNlTG9jYWxlKHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcmFnZSA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBhIHRleHQgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICovXG5cdGdldFRleHQoa2V5LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRpZiAoZGVmYXVsdFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGtleSAke2tleX0gbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0XHRpZiAoaXNPYmplY3QocikpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgXCJvdGhlclwiLCBkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIG51bWJlciBgY291bnRgIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QuIEluIGFkZGl0aW9uIHRvIGEgbnVtYmVyLCBvbmUgb2YgdGhlIGtleXdvcmRzIGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseS5cblx0ICogXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuIFJlbWVtYmVyOiBub3QgZXZlcnkgbGFuZ3VhZ2UgaGFzIGFsbCBydWxlcy5cblx0ICpcblx0ICogVGhlIGFwcHJvcHJpYXRlIHRleHQgZm9yIHRoaXMgbnVtYmVyIGlzIHRoZW4gc2VsZWN0ZWQuIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge2ludGVnZXJ8c3RyaW5nfSBjb3VudFxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldFBsdXJhbFJ1bGVUZXh0KGtleSwgY291bnQsIGRlZmF1bHRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLnN0b3JhZ2UuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHZhbGlkYXRlT2JqZWN0KHRoaXMuc3RvcmFnZS5nZXQoa2V5KSk7XG5cblx0XHRsZXQga2V5d29yZDtcblx0XHRpZiAoaXNTdHJpbmcoY291bnQpKSB7XG5cdFx0XHRrZXl3b3JkID0gY291bnQudG9Mb2NhbGVTdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y291bnQgPSB2YWxpZGF0ZUludGVnZXIoY291bnQpO1xuXHRcdFx0aWYgKGNvdW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHplcm8gY291bnRcblx0XHRcdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoXCJ6ZXJvXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHI/Lnplcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGtleXdvcmQgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyh0aGlzLmxvY2FsZS50b1N0cmluZygpKS5zZWxlY3QoXG5cdFx0XHRcdHZhbGlkYXRlSW50ZWdlcihjb3VudCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChyLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltrZXl3b3JkXSk7XG5cdFx0fVxuXG5cdFx0Ly8gQGRlcHJlY2F0ZWQgc2luY2UgMjAyMy0wMy0xNFxuXHRcdC8vIERFRkFVTFRfS0VZIGlzIHVuZGVmaW5lZFxuXHRcdC8vIGlmIChyLmhhc093blByb3BlcnR5KERFRkFVTFRfS0VZKSkge1xuXHRcdC8vICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcocltERUZBVUxUX0tFWV0pO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgdGV4dCBmb3IgYSBrZXlcblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDFcIiwgXCJNYWtlIG15IGRheSFcIik7XG5cdCAqIC8vIHBsdXJhbCBydWxlc1xuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQ2XCIsIHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSB0ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XG5cdCAqL1xuXHRzZXRUZXh0KGtleSwgdGV4dCkge1xuXHRcdGlmIChpc1N0cmluZyh0ZXh0KSB8fCBpc09iamVjdCh0ZXh0KSkge1xuXHRcdFx0dGhpcy5zdG9yYWdlLnNldCh2YWxpZGF0ZVN0cmluZyhrZXkpLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIG92ZXJsYXlzIGZyb20gYW4gb2JqZWN0LiBUaGUga2V5cyBhcmUgdHJhbnNmZXJyZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBlbnRlcmVkXG5cdCAqIGFzIHRleHQuXG5cdCAqXG5cdCAqIFRoZSB2YWx1ZXMgY2FuIGVpdGhlciBiZSBjaGFyYWN0ZXIgc3RyaW5ncyBvciwgaW4gdGhlIGNhc2Ugb2YgdGV4dHMgd2l0aCBwbHVyYWwgZm9ybXMsIG9iamVjdHMuIFRoZSBwbHVyYWwgZm9ybXNcblx0ICogbXVzdCBiZSBzdG9yZWQgYXMgdGV4dCB2aWEgYSBzdGFuZGFyZCBrZXkgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuXG5cdCAqXG5cdCAqIEFkZGl0aW9uYWxseSwgdGhlIGtleSBkZWZhdWx0IGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBubyBvdGhlciBrZXkgZml0cy5cblx0ICpcblx0ICogSW4gc29tZSBsYW5ndWFnZXMsIGxpa2UgZm9yIGV4YW1wbGUgaW4gR2VybWFuLCB0aGVyZSBpcyBubyBvd24gbW9yZSBudW1iZXIgYXQgdGhlIHZhbHVlIDAuIEluIHRoZXNlIGxhbmd1YWdlcyxcblx0ICogdGhlIGZ1bmN0aW9uIGFwcGxpZXMgYWRkaXRpb25hbGx5IHplcm8uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKHtcblx0ICogICBcInRleHQxXCI6IFwiTWFrZSBteSBkYXkhXCIsXG5cdCAqICAgXCJ0ZXh0MlwiOiBcIkknbGwgYmUgYmFjayFcIixcblx0ICogICBcInRleHQ2XCI6IHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2xhdGlvbnNcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0YXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHRyYW5zbGF0aW9ucyk7XG5cblx0XHRpZiAodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMuc3RvcmFnZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gW2VsZW1lbnRdIC0gRWxlbWVudCB0byBzZWFyY2ggZm9yIHRyYW5zbGF0aW9ucy4gRGVmYXVsdDogZWxlbWVudCB3aXRoIG9iamVjdGxpbmsgQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGluay5cbiAqIEByZXR1cm5zIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW1lbnQpIHtcblx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGVsZW1lbnQgPSBkLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgWyR7QVRUUklCVVRFX09CSkVDVExJTkt9fj1cIiR7dHJhbnNsYXRpb25zTGlua1N5bWJvbC50b1N0cmluZygpfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIkNhbm5vdCBmaW5kIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCBhIHRyYW5zbGF0aW9ucyBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0aWYgKCFoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXCIpO1xuXHR9XG5cblx0Y29uc3Qgb2JqID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblxuXHRmb3IgKGNvbnN0IHQgb2Ygb2JqKSB7XG5cdFx0aWYgKHQgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdHJhbnNsYXRpb25zLlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdGdldERvY3VtZW50VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVCb29sZWFuLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zZm9ybWVyIH07XG5cbi8qKlxuICogVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jdHJhbnNmb3JtZXJ8TW9uc3RlciBEb2NzfVxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL3RyYW5zZm9ybWVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXG5cdFx0aWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVPYmplY3QoY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFja3Muc2V0KG5hbWUsIHtcblx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcblx0XHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJucyB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcodmFsdWUpIHtcblx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcInRvU3RyaW5nXCIpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXHR9XG5cblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdHRydWVTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3ModHJ1ZVN0YXRlbWVudCwgdmFsdWUpO1xuXHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZmFsc2VTdGF0ZW1lbnQsIHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNvbmRpdGlvbiA/IHRydWVTdGF0ZW1lbnQgOiBmYWxzZVN0YXRlbWVudDtcblxuXHRcdGNhc2UgXCJ1Y2ZpcnN0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGZpcnN0Y2hhciA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZpcnN0Y2hhciArIHZhbHVlLnN1YnN0cigxKTtcblx0XHRjYXNlIFwidWN3b3Jkc1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShcblx0XHRcdFx0L14oW2EtelxcdTAwRTAtXFx1MDBGQ10pfFxccysoW2EtelxcdTAwRTAtXFx1MDBGQ10pL2csXG5cdFx0XHRcdGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHYudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiY291bnRcIjpcblx0XHRjYXNlIFwibGVuZ3RoXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1N0cmluZyh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSAmJlxuXHRcdFx0XHR2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcImxlbmd0aFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG5cblx0XHRjYXNlIFwidG8tYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJ0b2FcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYnRvYShjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJhdG9iXCI6XG5cdFx0Y2FzZSBcImZyb20tYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYXRvYihjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJlbXB0eVwiOlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cblx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QoY29uc29sZSkpIHtcblx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwicHJlZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBwcmVmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgdmFsdWU7XG5cblx0XHRjYXNlIFwic3VmZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBzdWZmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyBzdWZmaXg7XG5cblx0XHRjYXNlIFwidW5pcWlkXCI6XG5cdFx0XHRyZXR1cm4gbmV3IElEKCkudG9TdHJpbmcoKTtcblxuXHRcdGNhc2UgXCJmaXJzdC1rZXlcIjpcblx0XHRjYXNlIFwibGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1rZXlcIjpcblx0XHRcdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG5cblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwiZmlyc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0gMDtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcImxhc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gdmFsaWRhdGVJbnRlZ2VyKHBhcnNlSW50KGFyZ3Muc2hpZnQoKSkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwibnRoLWxhc3Qta2V5XCIpIHtcblx0XHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIGtleSAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IHVzZUtleSA9IGtleXM/LltrZXldO1xuXG5cdFx0XHRpZiAodmFsdWU/Llt1c2VLZXldKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZT8uW3VzZUtleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cblx0XHRjYXNlIFwia2V5XCI6XG5cdFx0Y2FzZSBcInByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImluZGV4XCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlLmdldChrZXkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZT8uW2tleV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU/LltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcInBhdGgtZXhpc3RzXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFBhdGhmaW5kZXIodmFsdWUpLmV4aXN0cyhrZXkpO1xuXG5cdFx0Y2FzZSBcImNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgcGYyID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXHRcdFx0bGV0IGNvbmNhdCA9IFwiXCI7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYWRkIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0aWYgKGlzU3RyaW5nKGtleSkgJiYga2V5LnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBmMi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdiA9IHBmMi5nZXRWaWEoa2V5KTtcblx0XHRcdFx0aWYgKCFpc1ByaW1pdGl2ZSh2KSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIG5vdCBwcmltaXRpdmVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25jYXQgKz0gdjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbmNhdDtcblx0XHRjYXNlIFwicGF0aFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cblx0XHRcdGlmICghcGYuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBmLmdldFZpYShrZXkpO1xuXG5cdFx0Y2FzZSBcInN1YnN0cmluZ1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IHBhcnNlSW50KGFyZ3NbMF0pIHx8IDA7XG5cdFx0XHRjb25zdCBlbmQgPSAocGFyc2VJbnQoYXJnc1sxXSkgfHwgMCkgKyBzdGFydDtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuXHRcdGNhc2UgXCJub3BcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCI/P1wiOlxuXHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWZhdWx0VHlwZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChkZWZhdWx0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmF1bHRUeXBlID0gXCJzdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChkZWZhdWx0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gYCR7ZGVmYXVsdFZhbHVlfWA7XG5cdFx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShhdG9iKGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleVZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleVZhbHVlID0ga2V5VmFsdWUuc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRtYXAuc2V0KGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXAuZ2V0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJlcXVhbHNcIjpcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHZhbHVlIHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBlcXVhbHNWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgaGlzdG9yeSBvZiBcdTIwMUN0eXBlb2YgbnVsbFx1MjAxRFxuXHRcdFx0ICogaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRcdFx0ICogSW4gSmF2YVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsIHdoaWNoIGluY29ycmVjdGx5IHN1Z2dlc3RzXG5cdFx0XHQgKiB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcIm51bGxcIjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mVmFsdWUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdHN3aXRjaCAodHlwZU9mVmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gZXF1YWxzVmFsdWU7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHBhcnNlRmxvYXQoZXF1YWxzVmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gKGVxdWFsc1ZhbHVlID09PSBcInRydWVcIiB8fCBlcXVhbHNWYWx1ZSA9PT0gXCJvblwiKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwibW9uZXlcIjpcblx0XHRjYXNlIFwiY3VycmVuY3lcIjpcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmVyd2VuZGVuIHZvbiBSZWdFeHAsIHVtIFdcdTAwRTRocnVuZyB1bmQgQmV0cmFnIHp1IGV4dHJhaGllcmVuXG5cdFx0XHRjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtBLVpdezN9KVtcXHMtXSooXFxkKyhcXC5cXGQrKT8pJC8pO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGN1cnJlbmN5IGZvcm1hdFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVuY3kgPSBtYXRjaFsxXTtcblx0XHRcdGNvbnN0IGFtb3VudCA9IG1hdGNoWzJdO1xuXG5cdFx0XHRjb25zdCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBhcmdzPy5bMF0gfHwgMjtcblx0XHRcdGNvbnN0IHJvdW5kaW5nSW5jcmVtZW50ID0gYXJncz8uWzFdIHx8IDU7XG5cblx0XHRcdGNvbnN0IG5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwge1xuXHRcdFx0XHRzdHlsZTogXCJjdXJyZW5jeVwiLFxuXHRcdFx0XHRjdXJyZW5jeTogY3VycmVuY3ksXG5cdFx0XHRcdG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4aW11bUZyYWN0aW9uRGlnaXRzLFxuXHRcdFx0XHRyb3VuZGluZ0luY3JlbWVudDogcm91bmRpbmdJbmNyZW1lbnQsXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5mLmZvcm1hdChhbW91bnQpO1xuXG5cdFx0Y2FzZSBcInRpbWVzdGFtcFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0aWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRpbWVzdGFtcDtcblxuXHRcdGNhc2UgXCJ0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVmb3JtYXRcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBhcmdzLnNoaWZ0KCkgfHwgXCJtZWRpdW1cIixcblx0XHRcdFx0dGltZVN0eWxlOiBhcmdzLnNoaWZ0KCkgfHwgXCJtZWRpdW1cIixcblx0XHRcdH07XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwieWVhclwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG5cdFx0Y2FzZSBcIm1vbnRoXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXG5cdFx0Y2FzZSBcImRheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG5cblx0XHRjYXNlIFwid2Vla2RheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXkoKTtcblxuXHRcdGNhc2UgXCJob3VyXCI6XG5cdFx0Y2FzZSBcImhvdXJzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG5cblx0XHRjYXNlIFwibWludXRlXCI6XG5cdFx0Y2FzZSBcIm1pbnV0ZXNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxuXHRcdGNhc2UgXCJzZWNvbmRzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcblxuXHRcdGNhc2UgXCJpMThuXCI6XG5cdFx0Y2FzZSBcInRyYW5zbGF0aW9uXCI6XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRrZXkgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG5cdFx0Y2FzZSBcInNldC10b2dnbGVcIjpcblx0XHRjYXNlIFwic2V0LXNldFwiOlxuXHRcdGNhc2UgXCJzZXQtcmVtb3ZlXCI6XG5cdFx0XHRjb25zdCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7dGhpcy5jb21tYW5kfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhpbnB1dCwgdmFsdWUpIHtcblx0c3dpdGNoIChpbnB1dCkge1xuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgXCJcXFxcdmFsdWVcIjpcblx0XHRcdHJldHVybiBcInZhbHVlXCI7XG5cdFx0Y2FzZSBcIlxcXFx1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIlxcXFxudWxsXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlQ29uZGl0aW9uKHZhbHVlKSB7XG5cdGNvbnN0IGxvd2VyVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG5cblx0cmV0dXJuIChcblx0XHQodmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHZhbHVlICE9PSBcIlwiICYmXG5cdFx0XHRsb3dlclZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRsb3dlclZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdHZhbHVlICE9PSBmYWxzZSkgfHxcblx0XHRsb3dlclZhbHVlID09PSBcIm9uXCIgfHxcblx0XHRsb3dlclZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdHZhbHVlID09PSB0cnVlXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vdHJhbnNmb3JtZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBpcGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCJ8XCI7XG5cbi8qKlxuICogVGhlIHBpcGUgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gY29tYmluZSBzZXZlcmFsIHByb2Nlc3Npbmcgc3RlcHMuXG4gKlxuICogQSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG4gKlxuICogV2l0aCB0aGUgUGlwZSwgcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgY29tYmluZWQuIEhlcmUsIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMgYWNjZXNzZWQgdmlhIHRoZSBwYXRoZmluZGVyIChwYXRoIGNvbW1hbmQpLlxuICogdGhlIHdvcmQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGxldHRlcnMgYW5kIGEgcHJlZml4IEhlbGxvIGlzIGFkZGVkLiB0aGUgdHdvIGJhY2tzbGFzaCBzYWZlIHRoZSBzcGFjZSBjaGFyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgIC4uLy4uL2V4YW1wbGUvZGF0YS9waXBlLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFBpcGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwaXBlIGEgcGlwZSBjb25zaXN0cyBvZiBjb21tYW5kcyB3aG9zZSBpbnB1dCBhbmQgb3V0cHV0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGlwZSBzeW1ib2wgYHxgLlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwaXBlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhwaXBlKTtcblxuXHRcdHRoaXMucGlwZSA9IHBpcGUuc3BsaXQoREVMSU1JVEVSKS5tYXAoKHYpID0+IHtcblx0XHRcdHJldHVybiBuZXcgVHJhbnNmb3JtZXIodik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdGZvciAoY29uc3QgWywgdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5waXBlKSkge1xuXHRcdFx0dC5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcnVuIGEgcGlwZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucGlwZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmFuc2Zvcm1lciwgY3VycmVudEluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRyYW5zZm9ybWVyLnJ1bihhY2N1bXVsYXRvcik7XG5cdFx0fSwgdmFsdWUpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxPYmplY3RTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE9iamVjdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd2F0Y2hkb2dTeW1ib2wgPSBTeW1ib2woXCJ3YXRjaGRvZ1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyT3BlbkluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyT3BlbkluZGV4XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYXJrZXJDbG9zZUluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyY2xvc2VJbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd29ya2luZ0RhdGFTeW1ib2wgPSBTeW1ib2woXCJ3b3JraW5nRGF0YVwiKTtcblxuLyoqXG4gKiBNZXNzYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggdGhlIGZvcm1hdHRlci4gVG8gZG8gdGhpcywgYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLiBUaGUgbWVzc2FnZSBjYW4gdGhlbiBjb250YWluIHBsYWNlaG9sZGVycy5cbiAqXG4gKiBMb29rIGF0IHRoZSBleGFtcGxlIGJlbG93LiBUaGUgcGxhY2Vob2xkZXJzIHVzZSB0aGUgbG9naWMgb2YgUGlwZS5cbiAqXG4gKiAjIyBNYXJrZXIgaW4gbWFya2VyXG4gKlxuICogTWFya2VycyBjYW4gYmUgbmVzdGVkLiBIZXJlLCB0aGUgaW5uZXIgbWFya2VyIGlzIHJlc29sdmVkIGZpcnN0IGAke3N1YmtleX0gXHUyMUE2IDEgPSAke215a2V5Mn1gIGFuZCB0aGVuIHRoZSBvdXRlciBtYXJrZXIgYCR7bXlrZXkyfWAuXG4gKlxuICogYGBgXG4gKiBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAqIGxldCBvYmogPSB7XG4gKiAgbXlrZXkyOiBcIjFcIixcbiAqICBzdWJrZXk6IFwiMlwiXG4gKiB9O1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCk7XG4gKiAvLyBcdTIxQTYgMVxuICogYGBgXG4gKlxuICogIyMgQ2FsbGJhY2tzXG4gKlxuICogVGhlIHZhbHVlcyBpbiBhIGZvcm1hdHRlciBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSBjb21tYW5kcyBvZiB0aGUgYFRyYW5zZm9ybWVyYCBvciB0aGVgUGlwZWAuXG4gKiBUaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgY2FsbGJhY2tzLlxuICpcbiAqIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAqICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICogICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIidcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH0pO1xuICpcbiAqIGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpXG4gKiAvLyBcdTIxQTYgXCIxXCJcbiAqXG4gKiAjIyBNYXJrZXIgd2l0aCBwYXJhbWV0ZXJcbiAqXG4gKiBBIHN0cmluZyBjYW4gYWxzbyBicmluZyBpdHMgb3duIHZhbHVlcy4gVGhlc2UgbXVzdCB0aGVuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBrZXkgYnkgYSBzZXBhcmF0b3IgYDo6YC5cbiAqIFRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdmFsdWUgYnkgYSBzZXBhcmF0b3IgYD1gLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBwaXBlLCB5b3UgbXVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzZXBhcmF0b3JzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyc7XG4gKlxuICogbmV3IEZvcm1hdHRlcih7XG4gKiAgICAgICBhOiB7XG4gKiAgICAgICAgICAgYjoge1xuICogICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAqICAgICAgIH1cbiAqICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIik7IC8vIHdpdGggcGlwZVxuICpcbiAqIC8vIFx1MjFBNiBIZWxsbyBXb3JsZCFcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UZXh0XG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0XG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSA9IG9iamVjdCB8fCB7fTtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzPXt9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdFx0cGFyYW1ldGVyOiB7XG5cdFx0XHRcdGRlbGltaXRlcjogXCI6OlwiLFxuXHRcdFx0XHRhc3NpZ25tZW50OiBcIj1cIixcblx0XHRcdH0sXG5cdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgUGFyYW1ldGVyIENoYXJhY3RlclxuXHQgKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNoYXJzIGFyZSBgOjpgIGFuZCBgPWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnIycpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ1snLCddJyk7XG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhc3NpZ25tZW50XG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0UGFyYW1ldGVyQ2hhcnMoZGVsaW1pdGVyLCBhc3NpZ25tZW50KSB7XG5cdFx0aWYgKGRlbGltaXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdID1cblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoYXNzaWdubWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG5ldyBNYXJrZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRNYXJrZXIoJyMnKTsgLy8gb3BlbiBhbmQgY2xvc2UgYXJlIGJvdGggI1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdpMThueycsJ30nKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfSBvcGVuXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfHVuZGVmaW5lZH0gY2xvc2Vcblx0ICogQHJldHVybiB7Rm9ybWF0dGVyfVxuXHQgKiBAc2luY2UgMS4xMi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRNYXJrZXIob3BlbiwgY2xvc2UpIHtcblx0XHRpZiAoY2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xvc2UgPSBvcGVuO1xuXHRcdH1cblxuXHRcdGlmIChpc1N0cmluZyhvcGVuKSkgb3BlbiA9IFtvcGVuXTtcblx0XHRpZiAoaXNTdHJpbmcoY2xvc2UpKSBjbG9zZSA9IFtjbG9zZV07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcIm9wZW5cIl0gPSB2YWxpZGF0ZUFycmF5KG9wZW4pO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0gPSB2YWxpZGF0ZUFycmF5KGNsb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0b28gZGVlcCBuZXN0aW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHRoaXNbd2F0Y2hkb2dTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0ge307XG5cdFx0cmV0dXJuIGZvcm1hdC5jYWxsKHRoaXMsIHRleHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHRleHQpIHtcblx0dGhpc1t3YXRjaGRvZ1N5bWJvbF0rKztcblx0aWYgKHRoaXNbd2F0Y2hkb2dTeW1ib2xdID4gMjApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZGVlcCBuZXN0aW5nXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3Blbk1hcmtlciA9XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdXTtcblx0Y29uc3QgY2xvc2VNYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdXTtcblxuXHQvLyBjb250YWlucyBubyBwbGFjZWhvbGRlcnNcblx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gLTEgfHwgdGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCksXG5cdFx0b3Blbk1hcmtlcixcblx0XHRjbG9zZU1hcmtlcixcblx0KTtcblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uW3RoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gKyAxXVxuXHQpIHtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRyZXN1bHQgPSBmb3JtYXQuY2FsbCh0aGlzLCByZXN1bHQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTIuMFxuICogQHBhcmFtIHRleHRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemUodGV4dCwgb3Blbk1hcmtlciwgY2xvc2VNYXJrZXIpIHtcblx0Y29uc3QgZm9ybWF0dGVkID0gW107XG5cblx0Y29uc3QgcGFyYW1ldGVyQXNzaWdubWVudCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXTtcblx0Y29uc3QgcGFyYW1ldGVyRGVsaW1pdGVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl07XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tzXCJdO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHQvLyBubyBtYXJrZXJcblx0XHRpZiAoc3RhcnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIGlmIChzdGFydEluZGV4ID4gMCkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkpO1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuXHRcdH1cblxuXHRcdGxldCBlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRsZXQgaW5zaWRlU3RhcnRJbmRleCA9IHRleHRcblx0XHRcdC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpXG5cdFx0XHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRcdGluc2lkZVN0YXJ0SW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCA8IGVuZEluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRva2VuaXplLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhpbnNpZGVTdGFydEluZGV4KSxcblx0XHRcdFx0XHRvcGVuTWFya2VyLFxuXHRcdFx0XHRcdGNsb3NlTWFya2VyLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaW5zaWRlU3RhcnRJbmRleCkgKyByZXN1bHQ7XG5cdFx0XHRcdGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdFx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5kSW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtleSA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoLCBlbmRJbmRleCk7XG5cdFx0Y29uc3QgcGFydHMgPSBrZXkuc3BsaXQocGFyYW1ldGVyRGVsaW1pdGVyKTtcblx0XHRjb25zdCBjdXJyZW50UGlwZSA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0sXG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBrdiBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3QgW2ssIHZdID0ga3Yuc3BsaXQocGFyYW1ldGVyQXNzaWdubWVudCk7XG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXVtrXSA9IHY7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdDEgPSBrZXkuc3BsaXQoXCJ8XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwaXBlIHN5bWJvbFxuXHRcdGNvbnN0IHQyID0gdDEuc3BsaXQoXCI6OlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHQzID0gdDIuc3BsaXQoXCIuXCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwYXRoIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdPy5bdDNdID8gXCJwYXRoOlwiIDogXCJzdGF0aWM6XCI7XG5cblx0XHRsZXQgY29tbWFuZCA9IFwiXCI7XG5cdFx0aWYgKFxuXHRcdFx0cHJlZml4ICYmXG5cdFx0XHRrZXkuaW5kZXhPZihwcmVmaXgpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInBhdGg6XCIpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInN0YXRpYzpcIikgIT09IDBcblx0XHQpIHtcblx0XHRcdGNvbW1hbmQgPSBwcmVmaXg7XG5cdFx0fVxuXG5cdFx0Y29tbWFuZCArPSBjdXJyZW50UGlwZTtcblxuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjb21tYW5kKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3JtYXR0ZWQucHVzaCh2YWxpZGF0ZVN0cmluZyhwaXBlLnJ1bih0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSkpKTtcblxuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgTWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcmFtZXRlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIE1lZGlhVHlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN1YnR5cGVcblx0ICogQHBhcmFtIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKHR5cGUsIHN1YnR5cGUsIHBhcmFtZXRlcikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdHR5cGU6IHZhbGlkYXRlU3RyaW5nKHR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRzdWJ0eXBlOiB2YWxpZGF0ZVN0cmluZyhzdWJ0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0cGFyYW1ldGVyOiBbXSxcblx0XHR9O1xuXG5cdFx0aWYgKHBhcmFtZXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXSA9IHZhbGlkYXRlQXJyYXkocGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9tZWRpYS10eXBlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0cmluZ31cblx0ICovXG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS50eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0cmluZ31cblx0ICovXG5cdGdldCBzdWJ0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5zdWJ0eXBlO1xuXHR9XG5cblx0Ly8gLyoqXG5cdC8vICAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119XG5cdC8vICAqL1xuXHQvLyBnZXQgcGFyYW1ldGVyKCkge1xuXHQvLyBcdHJldHVybiB0aGlzW2ludGVybmFsXS5wYXJhbWV0ZXI7XG5cdC8vIH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHJldHVybiB7TWFwfVxuXHQgKi9cblx0Z2V0IHBhcmFtZXRlcigpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXS5mb3JFYWNoKChwKSA9PiB7XG5cdFx0XHRsZXQgdmFsdWUgPSBwLnZhbHVlO1xuXG5cdFx0XHQvLyBpbnRlcm5hbGx5IHNwZWNpYWwgdmFsdWVzIGFyZSBwYXJ0bHkgc3RvcmVkIHdpdGggcXVvdGVzLCB0aGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlbS5cblx0XHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQuc2V0KHAua2V5LCB2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcmFtZXRlciA9IFtdO1xuXHRcdGZvciAoY29uc3QgYSBvZiB0aGlzW2ludGVybmFsXS5wYXJhbWV0ZXIpIHtcblx0XHRcdHBhcmFtZXRlci5wdXNoKGAke2Eua2V5fT0ke2EudmFsdWV9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke3RoaXNbaW50ZXJuYWxdLnR5cGV9LyR7dGhpc1tpbnRlcm5hbF0uc3VidHlwZX0ke1xuXHRcdFx0cGFyYW1ldGVyLmxlbmd0aCA+IDAgPyBgOyR7cGFyYW1ldGVyLmpvaW4oXCI7XCIpfWAgOiBcIlwiXG5cdFx0fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogY29uc29sZS5sb2coTW9uc3Rlci5UeXBlcy5wYXJzZU1lZGlhVHlwZSgpKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3BhcnNlTWVkaWFUeXBlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhwYXJzZU1lZGlhVHlwZSgpKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBTcGVjaWZpY2F0aW9uOlxuICpcbiAqIGBgYFxuICogZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICogbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gKiBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gKiBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lZGlhdHlwZVxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5NZWRpYVR5cGV9XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjA0NSNzZWN0aW9uLTUuMVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gbWFsZm9ybWVkIGRhdGEgdXJsXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuXHRpZiAoIWlzU3RyaW5nKHBhcmFtZXRlcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0cGFyYW1ldGVyLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdGVudHJ5ID0gZW50cnkudHJpbSgpO1xuXHRcdGlmIChlbnRyeSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGt2ID0gZW50cnkuc3BsaXQoXCI9XCIpO1xuXG5cdFx0Y29uc3Qga2V5ID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlswXSkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlsxXSkudHJpbSgpO1xuXG5cdFx0Ly8gaWYgdmFsdWVzIGFyZSBxdW90ZWQsIHRoZXkgcmVtYWluIHNvIGludGVybmFsbHlcblx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfSBtZWRpYXR5cGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiYXNlNjQ9dHJ1ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjQpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG1lZGlhdHlwZSkpIHtcblx0XHRcdG1lZGlhdHlwZSA9IHBhcnNlTWVkaWFUeXBlKG1lZGlhdHlwZSk7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbF0gPSB7XG5cdFx0XHRjb250ZW50OiB2YWxpZGF0ZVN0cmluZyhjb250ZW50KSxcblx0XHRcdG1lZGlhdHlwZTogdmFsaWRhdGVJbnN0YW5jZShtZWRpYXR5cGUsIE1lZGlhVHlwZSksXG5cdFx0XHRiYXNlNjQ6IHZhbGlkYXRlQm9vbGVhbihiYXNlNjQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBiYXNlNjQpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5wYXJzZURhdGFVUkwoKWAuXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhdXJsXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLkRhdGFVcmx9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VEYXRhVVJMKGRhdGF1cmwpIHtcblx0dmFsaWRhdGVTdHJpbmcoZGF0YXVybCk7XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwudHJpbSgpO1xuXG5cdGlmIChkYXRhdXJsLnN1YnN0cmluZygwLCA1KSAhPT0gXCJkYXRhOlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImluY29ycmVjdCBvciBtaXNzaW5nIGRhdGEgcHJvdG9jb2xcIik7XG5cdH1cblxuXHRkYXRhdXJsID0gZGF0YXVybC5zdWJzdHJpbmcoNSk7XG5cblx0Y29uc3QgcCA9IGRhdGF1cmwuaW5kZXhPZihcIixcIik7XG5cdGlmIChwID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtYWxmb3JtZWQgZGF0YSB1cmxcIik7XG5cdH1cblxuXHRsZXQgY29udGVudCA9IGRhdGF1cmwuc3Vic3RyaW5nKHAgKyAxKTtcblx0Y29uc3QgbWVkaWF0eXBlQW5kQmFzZTY0ID0gZGF0YXVybC5zdWJzdHJpbmcoMCwgcCkudHJpbSgpO1xuXHRsZXQgbWVkaWF0eXBlID0gXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUlcIjtcblx0bGV0IGJhc2U2NEZsYWcgPSBmYWxzZTtcblxuXHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0ICE9PSBcIlwiKSB7XG5cdFx0bWVkaWF0eXBlID0gbWVkaWF0eXBlQW5kQmFzZTY0O1xuXHRcdGlmIChtZWRpYXR5cGVBbmRCYXNlNjQuZW5kc1dpdGgoXCJiYXNlNjRcIikpIHtcblx0XHRcdGNvbnN0IGkgPSBtZWRpYXR5cGVBbmRCYXNlNjQubGFzdEluZGV4T2YoXCI7XCIpO1xuXHRcdFx0bWVkaWF0eXBlID0gbWVkaWF0eXBlQW5kQmFzZTY0LnN1YnN0cmluZygwLCBpKTtcblx0XHRcdGJhc2U2NEZsYWcgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZW50ID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpO1xuXHRcdH1cblxuXHRcdG1lZGlhdHlwZSA9IHBhcnNlTWVkaWFUeXBlKG1lZGlhdHlwZSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0fVxuXG5cdHJldHVybiBuZXcgRGF0YVVybChjb250ZW50LCBtZWRpYXR5cGUsIGJhc2U2NEZsYWcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFF1ZXVlIH07XG5cbi8qKlxuICogQSBxdWV1ZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgcHJvY2Vzc2VkIG9uZSBhZnRlciBhbm90aGVyIChmaXJzdCBpbiwgZmlyc3Qgb3V0KS5cbiAqXG4gKiBXaXRoIGEgcXVldWUgeW91IGNhbiBhZGQgaXRlbXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBgUXVldWUuYWRkKClgIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IGBRdWV1ZS5wb3AoKWAuXG4gKlxuICogV2l0aCBgUXVldWUucGVlaygpYCB5b3UgY2FuIGdldCB0aGUgZmlyc3QgaXRlbSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSBgbmV3IFF1ZXVlKClgLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9xdWV1ZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3F1ZXVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlYWQgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBVbmlxdWVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIFVuaXF1ZVF1ZXVlIGlzIGEgcXVldWUgdGhhdCBjb250YWlucyBpdGVtcyBvbmx5IG9uY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh2YWx1ZSk7XG5cblx0XHRpZiAoIXRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5oYXModmFsdWUpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuYWRkKHZhbHVlKTtcblx0XHRcdHN1cGVyLmFkZCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlID0gbmV3IFdlYWtTZXQoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5zaGlmdCgpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5kZWxldGUodmFsdWUpO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4vdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHsgVW5pcXVlUXVldWUgfSBmcm9tIFwiLi91bmlxdWVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogVGhlIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIHN1YmplY3Qgb2JqZWN0IGFzIHRoaXMgcG9pbnRlci4gRm9yIHRoaXMgcmVhc29uXG4gKiB0aGUgY2FsbGJhY2sgc2hvdWxkIG5vdCBiZSBhbiBhcnJvdyBmdW5jdGlvbiwgYmVjYXVzZSBpdCBnZXRzIHRoaXMgcG9pbnRlciBvZiBpdHMgb3duIGNvbnRleHQuXG4gKlxuICogSW5jbHVkZSB0aGlzIGNsYXNzIGluIHlvdXIgcHJvamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogYGBganNcbiAqIG5ldyBPYnNlcnZlcigoKT0+e1xuICogICAgIC8vIHRoaXMgaXMgbm90IHN1YmplY3RcbiAqIH0pXG4gKlxuICogbmV3IE9ic2VydmVyKGZ1bmN0aW9uKCkge1xuICogICAgIC8vIHRoaXMgaXMgc3ViamVjdFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBUbyBkbyB0aGlzLCBzaW1wbHkgc3BlY2lmeSB0aGVtLlxuICpcbiAqIGBgYGpzXG4gKiBPYnNlcnZlcihmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgICAgY29uc29sZS5sb2coYSwgYiwgYyk7IC8vIFx1MjFBNiBcImFcIiwgMiwgdHJ1ZVxuICogfSwgXCJhXCIsIDIsIHRydWUpXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYXZlIGFzIG1hbnkgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMgYXJlIGdpdmVuLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9vYnNlcnZlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJucyB7T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhZGRUYWcodGFnKSB7XG5cdFx0dGhpcy50YWdzLmFkZCh0YWcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRnZXRUYWdzKCkge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuZW50cmllcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNUYWcodGFnKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5jb250YWlucyh0YWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRpZiAoIWlzT2JqZWN0KHN1YmplY3QpKSB7XG5cdFx0XHRcdHJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5xdWV1ZS5hZGQoc3ViamVjdCk7XG5cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIHRoZSBxdWV1ZSBhbmQgdGhlIGBzZXRUaW1lb3V0YCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZlckxpc3QgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBPYnNlcnZlckxpc3QgY2xhc3MsIG9ic2VydmVyIGNhbiBiZSBtYW5hZ2VkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgT2JzZXJ2ZXJMaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9ic2VydmVycyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGF0dGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGRldGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHR0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGNvbnRhaW5zKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJqZWN0XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnkoc3ViamVjdCkge1xuXHRcdGNvbnN0IHBvbWlzZXMgPSBbXTtcblxuXHRcdGxldCBpID0gMDtcblx0XHRjb25zdCBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRwb21pc2VzLnB1c2godGhpcy5vYnNlcnZlcnNbaV0udXBkYXRlKHN1YmplY3QpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocG9taXNlcyk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFByb3h5T2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBXaXRoIHRoZSBQcm94eU9ic2VydmVyIHlvdSBjYW4gYXR0YWNoIG9ic2VydmVyIGZvciBvYnNlcnZhdGlvbi5cbiAqIFdpdGggZWFjaCBjaGFuZ2UgYXQgdGhlIG9iamVjdCB0byBiZSBvYnNlcnZlZCBhbiB1cGRhdGUgdGFrZXMgcGxhY2UuXG4gKlxuICogVGhpcyBhbHNvIGFwcGxpZXMgdG8gbmVzdGVkIG9iamVjdHMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIFByb3h5T2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnJlYWxTdWJqZWN0ID0gdmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblx0XHR0aGlzLnN1YmplY3QgPSBuZXcgUHJveHkob2JqZWN0LCBnZXRIYW5kbGVyLmNhbGwodGhpcykpO1xuXG5cdFx0dGhpcy5vYmplY3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuXHRcdHRoaXMub2JqZWN0TWFwLnNldCh0aGlzLnJlYWxTdWJqZWN0LCB0aGlzLnN1YmplY3QpO1xuXG5cdFx0dGhpcy5wcm94eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5wcm94eU1hcC5zZXQodGhpcy5zdWJqZWN0LCB0aGlzLnJlYWxTdWJqZWN0KTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzID0gbmV3IE9ic2VydmVyTGlzdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcHJveHktb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Qcm94eU9ic2VydmVyfVxuXHQgKi9cblx0c2V0U3ViamVjdChvYmopIHtcblx0XHRsZXQgaTtcblx0XHRjb25zdCBrID0gT2JqZWN0LmtleXModGhpcy5zdWJqZWN0KTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZGVsZXRlIHRoaXMuc3ViamVjdFtrW2ldXTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YmplY3QgPSBleHRlbmQodGhpcy5zdWJqZWN0LCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQ2hhbmdlcyB0byB0aGlzIG9iamVjdCBhcmUgbm90IG5vdGljZWQgYnkgdGhlIG9ic2VydmVycywgc28geW91IGNhbiBtYWtlIGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgYW5kIGluZm9ybSB0aGUgb2JzZXJ2ZXJzIGxhdGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0UmVhbFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbFN1YmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnlPYnNlcnZlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm5zIHt7ZGVmaW5lUHJvcGVydHk6IChmdW5jdGlvbigqPSwgKj0sICo9KTogKiksIHNldFByb3RvdHlwZU9mOiAoZnVuY3Rpb24oKiwgKj0pOiBib29sZWFuKSwgc2V0OiAoZnVuY3Rpb24oKiwgKiwgKiwgKik6IGJvb2xlYW4pLCBnZXQ6ICgoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICh1bmRlZmluZWQpKXwqKSwgZGVsZXRlUHJvcGVydHk6ICgoZnVuY3Rpb24oKiwgKik6IChib29sZWFuKSl8Kil9fVxuICogQHByaXZhdGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tLy0vc25pcHBldHMvNDl9XG4gKi9cbmZ1bmN0aW9uIGdldEhhbmRsZXIoKSB7XG5cdGNvbnN0IHByb3h5ID0gdGhpcztcblxuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuXHRjb25zdCBoYW5kbGVyID0ge1xuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWdldC1wLXJlY2VpdmVyXG5cdFx0Z2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCB2YWx1ZSBhcyBwcm94eSBpZiBvYmplY3Qgb3IgYXJyYXlcblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHByb3h5Lm9iamVjdE1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3h5Lm9iamVjdE1hcC5nZXQodmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3h5LnByb3h5TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IG5ldyBQcm94eSh2YWx1ZSwgaGFuZGxlcik7XG5cdFx0XHRcdFx0cHJveHkub2JqZWN0TWFwLnNldCh2YWx1ZSwgcCk7XG5cdFx0XHRcdFx0cHJveHkucHJveHlNYXAuc2V0KHAsIHZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLXNldC1wLXYtcmVjZWl2ZXJcblx0XHRzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSB7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHByb3h5LnByb3h5TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModGFyZ2V0KSkge1xuXHRcdFx0XHR0YXJnZXQgPSBwcm94eS5wcm94eU1hcC5nZXQodGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGN1cnJlbnQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyhjdXJyZW50KSkge1xuXHRcdFx0XHRjdXJyZW50ID0gcHJveHkucHJveHlNYXAuZ2V0KGN1cnJlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRsZXQgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcblxuXHRcdFx0aWYgKGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZXNjcmlwdG9yID0ge1xuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRkZXNjcmlwdG9yW1widmFsdWVcIl0gPSB2YWx1ZTtcblx0XHRcdHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVsZXRlLXBcblx0XHRkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG5cdFx0XHRpZiAoa2V5IGluIHRhcmdldCkge1xuXHRcdFx0XHRkZWxldGUgdGFyZ2V0W2tleV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWZpbmVvd25wcm9wZXJ0eS1wLWRlc2Ncblx0XHRkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0cHJvdG90eXBlb2YtdlxuXHRcdHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0MSwga2V5KTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaGFuZGxlcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEEgdGhlbWUgY2xhc3NcbiAqL1xuY2xhc3MgVGhlbWUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBuYW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihuYW1lKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXROYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgdGhlbWluZyB1c2VkIGluIHRoZSBkb2N1bWVudCBjYW4gYmUgZGVmaW5lZCB2aWEgdGhlIGh0bWwtdGFnLlxuICogVGhlIHRoZW1pbmcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZWAuXG4gKlxuICogQXMgbmFtZSBmb3IgYSB0aGVtZSBhbGwgY2hhcmFjdGVycyBhcmUgdmFsaWQsIHdoaWNoIGFyZSBhbHNvIGFsbG93ZWQgZm9yIGEgSFRNTEVsZW1lbnQtSUQuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiB0aGUgZGVmYXVsdCB0aGVtZSBuYW1lIGlzIGBtb25zdGVyYC5cbiAqXG4gKiBAcmV0dXJuIHtUaGVtZX1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiwgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50VGhlbWUgfSBmcm9tIFwiLi90aGVtZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRlbXBsYXRlIH07XG5cbi8qKlxuICogVGhlIHRlbXBsYXRlIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGNyZWF0aW5nIHRlbXBsYXRlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjbGFzc1xuICovXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UodGVtcGxhdGUsIEhUTUxUZW1wbGF0ZUVsZW1lbnQpO1xuXHRcdHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS90ZW1wbGF0ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGVtcGxhdGUgaWQgbm90IGZvdW5kLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREb2N1bWVudFRlbXBsYXRlKGlkLCBjdXJyZW50Tm9kZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhpZCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0Y29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTFRlbXBsYXRlRWxlbWVudFwiKTtcblx0Y29uc3QgRG9jdW1lbnRGcmFnbWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRGcmFnbWVudFwiKTtcblx0Y29uc3QgRG9jdW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50XCIpO1xuXG5cdGxldCBwcmVmaXhJRDtcblxuXHRpZiAoXG5cdFx0IShcblx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0KVxuXHQpIHtcblx0XHRpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRpZiAoY3VycmVudE5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgpKSB7XG5cdFx0XHRcdHByZWZpeElEID0gY3VycmVudE5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmdldFJvb3ROb2RlKCk7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0IShcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8XG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0IShcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdGN1cnJlbnROb2RlID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHRlbXBsYXRlO1xuXHRjb25zdCB0aGVtZSA9IGdldERvY3VtZW50VGhlbWUoKTtcblxuXHRpZiAocHJlZml4SUQpIHtcblx0XHRjb25zdCB0aGVtZWRQcmVmaXhJRCA9IGAke3ByZWZpeElEfS0ke2lkfS0ke3RoZW1lLmdldE5hbWUoKX1gO1xuXG5cdFx0Ly8gY3VycmVudCArIHRoZW1lZFByZWZpeElEXG5cdFx0dGVtcGxhdGUgPSBjdXJyZW50Tm9kZS5nZXRFbGVtZW50QnlJZCh0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gZG9jdW1lbnQgKyB0aGVtZWRQcmVmaXhJRFxuXHRcdHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhlbWVkUHJlZml4SUQpO1xuXHRcdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHRoZW1lZElEID0gYCR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0Ly8gY3VycmVudCArIHRoZW1lZElEXG5cdHRlbXBsYXRlID0gY3VycmVudE5vZGUuZ2V0RWxlbWVudEJ5SWQodGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHQvLyBkb2N1bWVudCArIHRoZW1lZElEXG5cdHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHQvLyBjdXJyZW50ICsgSURcblx0dGVtcGxhdGUgPSBjdXJyZW50Tm9kZS5nZXRFbGVtZW50QnlJZChpZCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdC8vIGRvY3VtZW50ICsgSURcblx0dGVtcGxhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihgdGVtcGxhdGUgJHtpZH0gbm90IGZvdW5kLmApO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuXG5leHBvcnQgeyBkaWZmIH07XG5cbi8qKlxuICogV2l0aCB0aGUgZGlmZiBmdW5jdGlvbiB5b3UgY2FuIHBlcmZvcm0gdGhlIGNoYW5nZSBvZiBvbmUgb2JqZWN0IHRvIGFub3RoZXIuIFRoZSByZXN1bHQgc2hvd3MgdGhlIGNoYW5nZXMgb2YgdGhlIHNlY29uZCBvYmplY3QgdG8gdGhlIGZpcnN0IG9iamVjdC5cbiAqXG4gKiBUaGUgb3BlcmF0b3IgYGFkZGAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHNlY29uZCBvYmplY3QuIGBkZWxldGVgIG1lYW5zIHRoYXQgc29tZXRoaW5nIGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCBjb21wYXJlZCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RpZmYubWpzXG4gKiBAcGFyYW0geyp9IGZpcnN0XG4gKiBAcGFyYW0geyp9IHNlY29uZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqL1xuZnVuY3Rpb24gZGlmZihmaXJzdCwgc2Vjb25kKSB7XG5cdHJldHVybiBkb0RpZmYoZmlyc3QsIHNlY29uZCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge1NldDxzdHJpbmc+fFNldDxudW1iZXI+fVxuICovXG5mdW5jdGlvbiBnZXRLZXlzKGEsIGIsIHR5cGUpIHtcblx0aWYgKGlzQXJyYXkodHlwZSkpIHtcblx0XHRjb25zdCBrZXlzID1cblx0XHRcdGEubGVuZ3RoID4gYi5sZW5ndGggPyBuZXcgQXJyYXkoYS5sZW5ndGgpIDogbmV3IEFycmF5KGIubGVuZ3RoKTtcblx0XHRrZXlzLmZpbGwoMCk7XG5cdFx0cmV0dXJuIG5ldyBTZXQoa2V5cy5tYXAoKF8sIGkpID0+IGkpKTtcblx0fVxuXG5cdHJldHVybiBuZXcgU2V0KE9iamVjdC5rZXlzKGEpLmNvbmNhdChPYmplY3Qua2V5cyhiKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gZGlmZlxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGRvRGlmZihhLCBiLCBwYXRoLCBkaWZmKSB7XG5cdGNvbnN0IHR5cGVBID0gdHlwZU9mKGEpO1xuXHRjb25zdCB0eXBlQiA9IHR5cGVPZihiKTtcblxuXHRjb25zdCBjdXJyUGF0aCA9IHBhdGggfHwgW107XG5cdGNvbnN0IGN1cnJEaWZmID0gZGlmZiB8fCBbXTtcblxuXHRpZiAodHlwZUEgPT09IHR5cGVCICYmICh0eXBlQSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlQSA9PT0gXCJhcnJheVwiKSkge1xuXHRcdGdldEtleXMoYSwgYiwgdHlwZUEpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIHYpKSB7XG5cdFx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYVt2XSwgYlt2XSwgXCJhZGRcIiwgY3VyclBhdGguY29uY2F0KHYpKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImRlbGV0ZVwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvRGlmZihhW3ZdLCBiW3ZdLCBjdXJyUGF0aC5jb25jYXQodiksIGN1cnJEaWZmKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvID0gZ2V0T3BlcmF0b3IoYSwgYiwgdHlwZUEsIHR5cGVCKTtcblx0XHRpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGEsIGIsIG8sIHBhdGgpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VyckRpZmY7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3JcbiAqIEBwYXJhbSB7YXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge3twYXRoOiBhcnJheSwgb3BlcmF0b3I6IHN0cmluZ319XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFJlc3VsdChhLCBiLCBvcGVyYXRvciwgcGF0aCkge1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3BlcmF0b3IsXG5cdFx0cGF0aCxcblx0fTtcblxuXHRpZiAob3BlcmF0b3IgIT09IFwiYWRkXCIpIHtcblx0XHRyZXN1bHQuZmlyc3QgPSB7XG5cdFx0XHR2YWx1ZTogYSxcblx0XHRcdHR5cGU6IHR5cGVvZiBhLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYSkpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuZmlyc3QuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvcGVyYXRvciA9PT0gXCJhZGRcIiB8fCBvcGVyYXRvciA9PT0gXCJ1cGRhdGVcIikge1xuXHRcdHJlc3VsdC5zZWNvbmQgPSB7XG5cdFx0XHR2YWx1ZTogYixcblx0XHRcdHR5cGU6IHR5cGVvZiBiLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYikpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYik/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuc2Vjb25kLmluc3RhbmNlID0gbmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOb3RFcXVhbChhLCBiKSB7XG5cdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBhLmdldFRpbWUoKSAhPT0gYi5nZXRUaW1lKCk7XG5cdH1cblxuXHRyZXR1cm4gYSAhPT0gYjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKGEsIGIpIHtcblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0bGV0IG9wZXJhdG9yO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUEgPSB0eXBlb2YgYTtcblxuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdGNvbnN0IHR5cGVCID0gdHlwZW9mIGI7XG5cblx0aWYgKHR5cGVBID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImFkZFwiO1xuXHR9IGVsc2UgaWYgKHR5cGVBICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImRlbGV0ZVwiO1xuXHR9IGVsc2UgaWYgKGlzTm90RXF1YWwoYSwgYikpIHtcblx0XHRvcGVyYXRvciA9IFwidXBkYXRlXCI7XG5cdH1cblxuXHRyZXR1cm4gb3BlcmF0b3I7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEBzaW5jZSAzLjU1LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNsZWVwKG1pbGxpc2Vjb25kcykge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGZpcmVFdmVudCwgZmlyZUN1c3RvbUV2ZW50LCBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9O1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzZW5kcyBhbiBldmVudFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAodHlwZSA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRlbGVtZW50LmNsaWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L0V2ZW50XG5cdFx0Y29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodmFsaWRhdGVTdHJpbmcodHlwZSksIHtcblx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRcdFx0Y29tcG9zZWQ6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGUsIHR5cGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5ET00uZmlyZUN1c3RvbUV2ZW50KClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IGRldGFpbFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwYXRoIGBFdmVudC5jb21wb3NlZFBhdGgoKWAgZnJvbSBhbiBldmVudCBhbmQgdHJpZXMgdG8gZmluZCB0aGUgbmV4dCBlbGVtZW50XG4gKiB1cCB0aGUgdHJlZSBgZWxlbWVudC5jbG9zZXN0KClgIHdpdGggdGhlIGF0dHJpYnV0ZSBhbmQgdmFsdWUuIElmIG5vIHZhbHVlLCBvciBhIHZhbHVlIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGF0dHJpYnV0ZVZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gXCIuLi9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vZGF0YS9waXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfQklORCxcblx0QVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcsIGlzSW5zdGFuY2UsIGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBTbGVlcCB9IGZyb20gXCIuLi91dGlsL3NsZWVwLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVXBkYXRlciwgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfTtcblxuLyoqXG4gKiBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tLiBJbiB0aGlzIHdheSwgc3RydWN0dXJlcyBhbmQgY29udGVudHMgaW4gdGhlIERPTSBjYW4gYmVcbiAqIHByb2dyYW1tYXRpY2FsbHkgYWRhcHRlZCB2aWEgYXR0cmlidXRlcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdG8gaW5jbHVkZSBhIHN0cmluZyBmcm9tIGFuIG9iamVjdCwgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlcGxhY2VgIGNhbiBiZSB1c2VkLlxuICogYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGNhbiBiZSBmb3VuZCB1bmRlciBbbW9uc3RlcmpzLm9yZ10oaHR0cHM6Ly9tb25zdGVyanMub3JnLylcbiAqXG4gKiBDaGFuZ2VzIHRvIGF0dHJpYnV0ZXMgYXJlIG1hZGUgb25seSB3aGVuIHRoZSBkaXJlY3QgdmFsdWVzIGFyZSBjaGFuZ2VkLiBJZiB5b3Ugd2FudCB0byBhc3NpZ24gY2hhbmdlc1xuICogdG8gb3RoZXIgdmFsdWVzIGFzIHdlbGwsIHlvdSBoYXZlIHRvIGluc2VydCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0LXRoaXNgLiBUaGlzIHNob3VsZCBiZVxuICogZG9uZSB3aXRoIGNhcmUsIGFzIGl0IGNhbiByZWR1Y2UgcGVyZm9ybWFuY2UuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS91cGRhdGVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIGRvbVxuICovXG5jbGFzcyBVcGRhdGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdHxQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gc3ViamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuXHQgKiBAc2VlIHtAbGluayBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZX1cblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN1YmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGlmIChzdWJqZWN0ID09PSB1bmRlZmluZWQpIHN1YmplY3QgPSB7fTtcblx0XHRpZiAoIWlzSW5zdGFuY2Uoc3ViamVjdCwgUHJveHlPYnNlcnZlcikpIHtcblx0XHRcdHN1YmplY3QgPSBuZXcgUHJveHlPYnNlcnZlcihzdWJqZWN0KTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGVsZW1lbnQ6IHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLFxuXHRcdFx0bGFzdDoge30sXG5cdFx0XHRjYWxsYmFja3M6IG5ldyBNYXAoKSxcblx0XHRcdGV2ZW50VHlwZXM6IFtcImtleXVwXCIsIFwiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkcm9wXCIsIFwidG91Y2hlbmRcIiwgXCJpbnB1dFwiXSxcblx0XHRcdHN1YmplY3Q6IHN1YmplY3QsXG5cdFx0fTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQoXG5cdFx0XHRcImNoZWNrc3RhdGVcIixcblx0XHRcdGdldENoZWNrU3RhdGVDYWxsYmFjay5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRcdFx0XHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZih0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0LCBzKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IGNsb25lKHMpO1xuXG5cdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGRpZmZSZXN1bHQpKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFNsZWVwKDEpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0aW5zZXJ0RWxlbWVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0czogJ2tleXVwJywgJ2NsaWNrJywgJ2NoYW5nZScsICdkcm9wJywgJ3RvdWNoZW5kJ1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9FdmVudHN9XG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcGFyYW0ge0FycmF5fSB0eXBlc1xuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKi9cblx0c2V0RXZlbnRUeXBlcyh0eXBlcykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMgPSB2YWxpZGF0ZUFycmF5KHR5cGVzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kLCB0aGUgZXZlbnRsaXN0ZW5lcnMgYXJlIGhvb2tlZCBpbiBhbmQgdGhlIG1hZ2ljIGJlZ2lucy5cblx0ICpcblx0ICogYGBgXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHN1bW1hcnkgTGV0IHRoZSBtYWdpYyBiZWdpblxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKCkge1xuXHRcdC8vIHRoZSBrZXkgX19pbml0X19oYXMgbm8gZnVydGhlciBtZWFuaW5nIGFuZCBpcyBvbmx5XG5cdFx0Ly8gdXNlZCB0byBjcmVhdGUgdGhlIGRpZmYgZm9yIGVtcHR5IG9iamVjdHMuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IHsgX19pbml0X186IHRydWUgfTtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5ub3RpZnlPYnNlcnZlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYm91bmQgZWxlbWVudHMgYW5kIGNoYW5nZXMgdGhlbSBpbiBzdWJqZWN0XG5cdCAqXG5cdCAqIEBzaW5jZSAxLjI3LjBcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uVXBkYXRlcn1cblx0ICovXG5cdHJldHJpZXZlKCkge1xuXHRcdHJldHJpZXZlRnJvbUJpbmRpbmdzLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSWYgeW91IGhhdmUgcGFzc2VkIGEgUHJveHlPYnNlcnZlciBpbiB0aGUgY29uc3RydWN0b3IsIHlvdSB3aWxsIGdldCB0aGUgb2JqZWN0IHRoYXQgdGhlIFByb3h5T2JzZXJ2ZXIgbWFuYWdlcyBoZXJlLlxuXHQgKiBIb3dldmVyLCBpZiB5b3UgcGFzc2VkIGEgc2ltcGxlIG9iamVjdCwgaGVyZSB5b3Ugd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhhdCBvYmplY3QuXG5cdCAqXG5cdCAqIEZvciBjaGFuZ2VzIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQobmFtZSwgY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAcmV0dXJuIHtmdW5jdGlvblxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBnZXRDaGVja1N0YXRlQ2FsbGJhY2soKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoY3VycmVudCkge1xuXHRcdC8vIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0ICh0aGVyZWZvcmUgbm8gYXJyYXkgZnVuY3Rpb24gaGVyZSlcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGAke3RoaXMudmFsdWV9YCA9PT0gYCR7Y3VycmVudH1gID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQpIHtcblx0XHRcdGlmIChpc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL3VwZGF0ZXJAQEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAdGhpcyBVcGRhdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xFdmVudEhhbmRsZXIoKSB7XG5cdGlmICh0aGlzW3N5bWJvbF0pIHtcblx0XHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGguXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbc3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cblx0XHRpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdH0sIDApO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlQW5kU2V0VmFsdWUoZWxlbWVudCkge1xuXHRjb25zdCBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCkpO1xuXG5cdGxldCBwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cdGlmIChwYXRoID09PSBudWxsKVxuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblxuXHRpZiAocGF0aC5pbmRleE9mKFwicGF0aDpcIikgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cdH1cblxuXHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoNSk7IC8vIHJlbW92ZSBwYXRoOiBmcm9tIHRoZSBzdHJpbmdcblxuXHRsZXQgdmFsdWU7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuXHRcdFx0XHRsZXQgb3B0aW9ucyA9IGVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucztcblx0XHRcdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlIG9wdGlvbjpjaGVja2VkXCIpO1xuXHRcdFx0XHR2YWx1ZSA9IEFycmF5LmZyb20ob3B0aW9ucykubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyB2YWx1ZXMgZnJvbSBjdXN0b20gZWxlbWVudHNcblx0fSBlbHNlIGlmIChcblx0XHQoZWxlbWVudD8uY29uc3RydWN0b3I/LnByb3RvdHlwZSAmJlxuXHRcdFx0ISFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRlbGVtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XCJ2YWx1ZVwiLFxuXHRcdFx0KT8uW1wiZ2V0XCJdKSB8fFxuXHRcdGVsZW1lbnQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKVxuXHQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQ/LltcInZhbHVlXCJdO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIG9iamVjdFwiKTtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRjb25zdCB0eXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFKTtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJpbnRcIjpcblx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0Y2FzZSBcImludGVnZXJcIjpcblx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdGNhc2UgXCJib29sXCI6XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiMVwiIHx8IHZhbHVlID09PSBcIm9uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFycmF5XCI6XG5cdFx0XHRjYXNlIFwibGlzdFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRjYXNlIFwianNvblwiOlxuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvcHkgPSBjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybjtcblxuXHRcdHdoaWxlIChwLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwLmpvaW4oXCIuXCIpO1xuXG5cdFx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlR9Kj1cInBhdGg6JHtjdXJyZW50fVwiXWA7XG5cblx0XHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgWywgY29udGFpbmVyRWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRcdGlmIChtZW0uaGFzKGNvbnRhaW5lckVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRcdFx0bWVtLmFkZChjb250YWluZXJFbGVtZW50KTtcblxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlZiA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IGtleSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IHJlZlByZWZpeCA9IGAke2tleX0tYDtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHQvLyB0aGlzIGNhc2UgaXMgYWN0dWFsbHkgZXhjbHVkZWQgYnkgdGhlIHF1ZXJ5IGJ1dCBpcyBuZXZlcnRoZWxlc3MgY2hlY2tlZCBhZ2FpbiBoZXJlXG5cdFx0XHRcdGlmIChjbWQuaW5kZXhPZihcInxcIikgPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGF0YVBhdGggPSBjbWQuc3BsaXQoXCI6XCIpLnBvcCgpO1xuXG5cdFx0XHRcdGxldCBpbnNlcnRQb2ludDtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSBjb250YWluZXJFbGVtZW50Lmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgW2ksIG9ial0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVmID0gcmVmUHJlZml4ICsgaTtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGF0aCA9IGAke2RhdGFQYXRofS4ke2l9YDtcblxuXHRcdFx0XHRcdGF2YWlsYWJsZS5hZGQocmVmKTtcblx0XHRcdFx0XHRjb25zdCByZWZFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9PVwiJHtyZWZ9XCJdYCxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlZkVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSByZWZFbGVtZW50O1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXJFbGVtZW50LCBrZXksIHJlZiwgY3VycmVudFBhdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9Kj1cIiR7cmVmUHJlZml4fVwiXWAsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2RlcykpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhYXZhaWxhYmxlLmhhcyhcblx0XHRcdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSksXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0XHRcdGAke2NvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cC5wb3AoKTtcblx0XHR9XG5cblx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSBicmVhaztcblx0XHRpZiAod2QrKyA+IDIwMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICovXG5mdW5jdGlvbiBhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lciwga2V5LCByZWYsIHBhdGgpIHtcblx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShrZXksIGNvbnRhaW5lcik7XG5cblx0Y29uc3Qgbm9kZXMgPSB0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMuY2hpbGROb2RlcykpIHtcblx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSwgcmVmKTtcblx0XHR9XG5cblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKSB7XG5cdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSkpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5jaGlsZE5vZGVzKSkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUoY2hpbGQsIGtleSwgcGF0aCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRpZiAoc2xvdHMubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3QuYXNzaWduZWROb2RlcygpKSkge1xuXHRcdFx0XHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQ29udGVudChjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCBzdGF0aWMgZGF0YSBpcyBhbHdheXMgY2hhbmdlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVhY3QgdG8gY2hhbmdlcyBoZXJlLlxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwiaTE4bjpcIl1gO1xuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgJHtxdWVyeX1gKTtcblxuXHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cblx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0d2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5hcHBlbmRDaGlsZCh2YWx1ZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgJHtlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUF0dHJpYnV0ZXMoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJU31dWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31dLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfSo9XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cImkxOG46XCJdYDtcblxuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHR9XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHQvLyB0aGlzIGNhc2Ugb2NjdXJzIHdoZW4gdGhlIEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTIGF0dHJpYnV0ZSBpcyBzZXRcblx0XHRcdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblxuXHRcdFx0Zm9yIChsZXQgWywgZGVmXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzLnNwbGl0KFwiLFwiKSkpIHtcblx0XHRcdFx0ZGVmID0gdHJpbVNwYWNlcyhkZWYpO1xuXHRcdFx0XHRjb25zdCBpID0gZGVmLmluZGV4T2YoXCIgXCIpO1xuXHRcdFx0XHRjb25zdCBuYW1lID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZiwgZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlLmNhbGwodGhpcywgZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fCp9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAodmFsdWUuaW5kZXhPZihvcHQudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0b3B0LnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3B0LnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHQvLyBPbmx5IG9uZSB2YWx1ZSBtYXkgYmUgc2VsZWN0ZWRcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0aWYgKG9wdC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyYWRpb1wiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGV4dFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlTGlzdHxIVE1MRWxlbWVudHxTZXQ8SFRNTEVsZW1lbnQ+fSBlbGVtZW50c1xuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZVtdfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gZWxlbWVudHMgaXMgbm90IGFuIGluc3RhbmNlIG9mIE5vZGVMaXN0LCBIVE1MRWxlbWVudCBvciBTZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSBzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcbiAqL1xuZnVuY3Rpb24gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQoZWxlbWVudHMsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHQpO1xuXHR9XG5cblx0aWYgKCEodHlwZW9mIHN5bWJvbCA9PT0gXCJzeW1ib2xcIikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic3ltYm9sIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXCIpO1xuXHR9XG5cblx0Y29uc3QgdXBkYXRlcnMgPSBuZXcgU2V0KCk7XG5cblx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIFNldCkge1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgZWxlbWVudHMgaXMgbm90IGEgdmFsaWQgdHlwZS4gKGFjdHVhbDogJHt0eXBlb2YgZWxlbWVudHN9KWAsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHVwZGF0ZXJDYWxsYmFja3MgPSBbXTtcblx0Y29uc3QgY2IgPSB0aGlzPy5bdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF07XG5cdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjYWxsYmFja3MgPSBjYi5jYWxsKHRoaXMpO1xuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2tzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR1cGRhdGVyQ2FsbGJhY2tzLnB1c2goW25hbWUsIGNhbGxiYWNrXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzOiAke25hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrcyBkbyBub3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uc2AsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB1ID0gbmV3IFVwZGF0ZXIoZWxlbWVudCwgb2JqZWN0KTtcblx0XHR1cGRhdGVycy5hZGQodSk7XG5cblx0XHRpZiAodXBkYXRlckNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgdXBkYXRlckNhbGxiYWNrcykge1xuXHRcdFx0XHR1LnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXN1bHQucHVzaChcblx0XHRcdHUucnVuKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fSk7XG5cblx0aWYgKHVwZGF0ZXJzLnNpemUgPiAwKSB7XG5cdFx0YWRkVG9PYmplY3RMaW5rKHRoaXMsIHN5bWJvbCwgdXBkYXRlcnMpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMsIGdldFNsb3R0ZWROb2RlcyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkTm9kZXMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZE5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWRFbGVtZW50cyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHsgZXh0cmFjdEtleXMgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUga2V5cyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYW5kIHJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5UHJlZml4XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5U2VwYXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVTZXBhcmF0b3JcbiAqIEByZXR1cm5zIHtNYXA8YW55LCBhbnk+fVxuICovXG5mdW5jdGlvbiBleHRyYWN0S2V5cyhcblx0b2JqLFxuXHRrZXlQcmVmaXggPSBcIlwiLFxuXHRrZXlTZXBhcmF0b3IgPSBcIi1cIixcblx0dmFsdWVTZXBhcmF0b3IgPSBcIi5cIixcbikge1xuXHRjb25zdCByZXN1bHRNYXAgPSBuZXcgTWFwKCk7XG5cblx0ZnVuY3Rpb24gaGVscGVyKGN1cnJlbnRPYmosIGN1cnJlbnRLZXlQcmVmaXgsIGN1cnJlbnRWYWx1ZVByZWZpeCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0Y3VycmVudE9ialtrZXldICE9PSBudWxsICYmXG5cdFx0XHRcdHR5cGVvZiBjdXJyZW50T2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0IUFycmF5LmlzQXJyYXkoY3VycmVudE9ialtrZXldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0tleVByZWZpeCA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlUHJlZml4ID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRoZWxwZXIoY3VycmVudE9ialtrZXldLCBuZXdLZXlQcmVmaXgsIG5ld1ZhbHVlUHJlZml4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpbmFsS2V5ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgZmluYWxWYWx1ZSA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0cmVzdWx0TWFwLnNldChmaW5hbEtleSwgZmluYWxWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGVscGVyKG9iaiwga2V5UHJlZml4LCBrZXlQcmVmaXgpO1xuXHRyZXR1cm4gcmVzdWx0TWFwO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKiB7XG4gKiAgICAnZm9vJzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tZm9vPVwiZm9vXCI+PC9kaXY+XG4gKiAgICAnYmFyLmJheic6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJheicgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyLmJheicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJhej1cImZvb1wiPjwvZGl2PlxuICogfVxuICpcbiAqIEBzaW5jZSAzLjM4LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKFxuXHRlbGVtZW50LFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0aWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHRcdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHRcdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0XHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdFx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiZcblx0XHRcdFx0aXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvcHRpb25WYWx1ZSA9IGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBvcHRpb25WYWx1ZTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4uL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9O1xuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuNDUuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgb2JqZWN0IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMge09iamVjdH0gLSBUaGUgaW5pdGlhbGl6ZWQgb3B0aW9ucyBvYmplY3QuXG4gKiBAdGhpcyBIVE1MRWxlbWVudCAtIFRoZSBjb250ZXh0IG9mIHRoZSBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0ZWxlbWVudCxcblx0bmFtZSxcblx0b3B0aW9ucyxcblx0bWFwcGluZyA9IHt9LFxuXHRwcmVmaXggPSBcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIsXG4pIHtcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH1cblxuXHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0aWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiYgaXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKSkge1xuXHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdH1cblxuXHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHR9XG5cblx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZU9iamVjdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHsgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfSBmcm9tIFwiLi91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMgfSBmcm9tIFwiLi9zbG90dGVkLm1qc1wiO1xuaW1wb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9IGZyb20gXCIuL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59O1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhc3NlbWJsZU1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhc3NlbWJsZU1ldGhvZFN5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiB0aGlzIHN5bWJvbCBob2xkcyB0aGUgYXR0cmlidXRlIG9ic2VydmVyIGNhbGxiYWNrcy4gVGhlIGtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogSFRNTEVsZW1lbnRcbiAqIEBleHRlcm5hbCBIVE1MRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnRcbiAqXG4gKiBAc3RhcnR1bWwgY3VzdG9tZWxlbWVudC1zZXF1ZW5jZWRpYWdyYW0ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKlxuICogYXV0b251bWJlclxuICpcbiAqIFNjcmlwdCAtPiBET006IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdteS1lbGVtZW50JylcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50OiBjb25zdHJ1Y3RvcigpXG4gKiBDdXN0b21FbGVtZW50IC0+IEN1c3RvbUVsZW1lbnQ6IFtpbml0TWV0aG9kU3ltYm9sXSgpXG4gKlxuICogQ3VzdG9tRWxlbWVudCAtLT4gRE9NOiBFbGVtZW50XG4gKiBET00gLS0+IFNjcmlwdCA6IGVsZW1lbnRcbiAqXG4gKlxuICogU2NyaXB0IC0+IERPTTogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZChlbGVtZW50KVxuICpcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50IDogY29ubmVjdGVkQ2FsbGJhY2soKVxuICpcbiAqIG5vdGUgcmlnaHQgQ3VzdG9tRWxlbWVudDogaXMgb25seSBjYWxsZWQgYXRcXG50aGUgZmlyc3QgY29ubmVjdGlvblxuICogQ3VzdG9tRWxlbWVudCAtPiBDdXN0b21FbGVtZW50IDogW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpXG4gKlxuICogLi4uIC4uLlxuICpcbiAqIGF1dG9udW1iZXJcbiAqXG4gKiBTY3JpcHQgLT4gRE9NOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KVxuICogRE9NIC0+IEN1c3RvbUVsZW1lbnQ6IGRpc2Nvbm5lY3RlZENhbGxiYWNrKClcbiAqXG4gKlxuICogQGVuZHVtbFxuICpcbiAqIEBzdGFydHVtbCBjdXN0b21lbGVtZW50LWNsYXNzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBAZW5kdW1sXG4gKi9cblxuLyoqXG4gKiBUaGUgYEN1c3RvbUVsZW1lbnRgIGNsYXNzIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZSBhIG5ldyBIVE1MIGVsZW1lbnQgdXNpbmcgdGhlIHBvd2VyIG9mIEN1c3RvbSBFbGVtZW50cy5cbiAqXG4gKiAqKklNUE9SVEFOVDoqKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZVxuICogdG8gbWFrZSB0aGUgdGFnIGRlZmluZWQgdmlhIHRoZSBgZ2V0VGFnYCBtZXRob2Qga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAgZnVuY3Rpb24uXG4gKlxuICogIyMgSW50ZXJhY3Rpb25cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2N1c3RvbWVsZW1lbnQtc2VxdWVuY2VkaWFncmFtLnBuZ1wiPlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAZXh0ZW5kcyBleHRlcm5hbDpIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBIVE1MNSBjdXN0b20gY29udHJvbHMuXG4gKi9cbmNsYXNzIEN1c3RvbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBBIG5ldyBvYmplY3QgaXMgY3JlYXRlZC4gRmlyc3QgdGhlIGBpbml0T3B0aW9uc2AgbWV0aG9kIGlzIGNhbGxlZC4gSGVyZSB0aGVcblx0ICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqXG5cdCAqIElNUE9SVEFOVDogQ3VzdG9tQ29udHJvbHMgaW5zdGFuY2VzIGFyZSBub3QgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLCBidXQgZWl0aGVyIHZpYSBhIHRhZyBpbiB0aGUgSFRNTCBvciB2aWEgPGNvZGU+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpPC9jb2RlPi5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uLlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyh0aGlzLCBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMpKSxcblx0XHR9KTtcblx0XHR0aGlzW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0gPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZVxuXHQgKiBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXRob2QgaXMgc3RhdGljLlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEBwYXJhbSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGFkZEF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSwgY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHJlbW92ZUF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSkge1xuXHRcdGRlbGV0ZSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZGVmYXVsdHNgIHByb3BlcnR5IGRlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIGNvbnRyb2wuIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZXNlLFxuXHQgKiB5b3UgY2FuIHVzZSB2YXJpb3VzIG1ldGhvZHMsIHdoaWNoIGFyZSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0XG5cdCAqIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmdlbmRvY2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfS5cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdzpcblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2hhZG93Um9vdCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2F0dGFjaFNoYWRvdyksXG5cdCAqIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGUpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbG90IGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCkuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuIFdoZW4gcHJlc2VudCwgaXQgbWFrZXMgdGhlIGVsZW1lbnQgbm9uLW11dGFibGUsIG5vbi1mb2N1c2FibGUsIGFuZCBub24tc3VibWl0dGFibGUgd2l0aCB0aGUgZm9ybS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNoYWRvd01vZGU9b3BlbiBTcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHNoYWRvdyByb290LiBXaGVuIHNldCB0byBgb3BlbmAsIGVsZW1lbnRzIGluIHRoZSBzaGFkb3cgcm9vdCBhcmUgYWNjZXNzaWJsZSBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSB0aGUgcm9vdCwgd2hpbGUgc2V0dGluZyBpdCB0byBgY2xvc2VkYCBkZW5pZXMgYWNjZXNzIHRvIHRoZSByb290J3Mgbm9kZXMgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgaXQuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGVsZWdhdGVzRm9jdXM9dHJ1ZSBTcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb250cm9sIHdpdGggcmVzcGVjdCB0byBmb2N1c2FiaWxpdHkuIFdoZW4gc2V0IHRvIGB0cnVlYCwgaXQgbWl0aWdhdGVzIGN1c3RvbSBlbGVtZW50IGlzc3VlcyBhcm91bmQgZm9jdXNhYmlsaXR5LiBXaGVuIGEgbm9uLWZvY3VzYWJsZSBwYXJ0IG9mIHRoZSBzaGFkb3cgRE9NIGlzIGNsaWNrZWQsIHRoZSBmaXJzdCBmb2N1c2FibGUgcGFydCBpcyBnaXZlbiBmb2N1cywgYW5kIHRoZSBzaGFkb3cgaG9zdCBpcyBnaXZlbiBhbnkgYXZhaWxhYmxlIDpmb2N1cyBzdHlsaW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFNwZWNpZmllcyB0aGUgdGVtcGxhdGVzIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbj11bmRlZmluZWQgU3BlY2lmaWVzIHRoZSBtYWluIHRlbXBsYXRlIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZU1hcHBpbmcgU3BlY2lmaWVzIHRoZSBtYXBwaW5nIG9mIHRlbXBsYXRlcy5cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdHNoYWRvd01vZGU6IFwib3BlblwiLFxuXHRcdFx0ZGVsZWdhdGVzRm9jdXM6IHRydWUsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlTWFwcGluZzoge30sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBsYWJlbHMgb2YgdGhlIGVsZW1lbnQuXG5cdCAqIFRoZSBsYWJlbHMgYXJlIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuXHQgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogSWYgdGhlIHRyYW5zbGF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYWJlbCwgdGhlIGxhYmVsIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSAgQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG5cdCAqL1xuXHR1cGRhdGVJMThuKCkge1xuXHRcdGNvbnN0IHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0aWYgKCF0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIpO1xuXHRcdGlmICghKGlzT2JqZWN0KGxhYmVscykgfHwgaXNJdGVyYWJsZShsYWJlbHMpKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbGFiZWxzKSB7XG5cdFx0XHRjb25zdCBkZWYgPSBsYWJlbHNba2V5XTtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKGRlZikpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmKTtcblx0XHRcdFx0aWYgKHRleHQgIT09IGRlZikge1xuXHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9YCwgdGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KGRlZikpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBrIGluIGRlZikge1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBkZWZba107XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgaywgZCk7XG5cdFx0XHRcdFx0aWYgKCFpc1N0cmluZyh0ZXh0KSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRleHQgIT09IGQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9LiR7a31gLCB0ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0VGFnKClgIG1ldGhvZCByZXR1cm5zIHRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcndyaXR0ZW5cblx0ICogYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqXG5cdCAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBjaGVjayBvbiB0aGUgbmFtZSBvZiB0aGUgdGFnIGluIHRoaXMgY2xhc3MuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuXHQgKiB0aGUgZGV2ZWxvcGVyIHRvIGFzc2lnbiBhbiBhcHByb3ByaWF0ZSB0YWcgbmFtZS4gSWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLCB0aGVcblx0ICogYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCgpYCBtZXRob2Qgd2lsbCBpc3N1ZSBhbiBlcnJvci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIG1ldGhvZCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIlRoZSBtZXRob2QgYGdldFRhZygpYCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldENTU1N0eWxlU2hlZXQoKWAgbWV0aG9kIHJldHVybnMgYSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgQ1NTU3R5bGVTaGVldGAgY29uc3RydWN0b3IsIHRoZW4gYW4gb2JqZWN0IGNhbiBiZSBidWlsdCB1c2luZyB0aGUgcHJvdmlkZWQgZGV0b3VyLlxuXHQgKlxuXHQgKiBJZiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgdGhlbiB0aGUgc2hhZG93IHJvb3QgZG9lcyBub3QgcmVjZWl2ZSBhIHN0eWxlc2hlZXQuXG5cdCAqXG5cdCAqIEV4YW1wbGUgdXNhZ2U6XG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHQgKiAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHQgKiAgICAgc2hlZXQucmVwbGFjZVN5bmMoXCJwIHsgY29sb3I6IHJlZDsgfVwiKTtcblx0ICogICAgIHJldHVybiBzaGVldDtcblx0ICogfVxuXHQgKiBgYGBcblx0ICpcblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3Rvcixcblx0ICogeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIHRvIGNyZWF0ZSB0aGUgc3R5bGVzaGVldDpcblx0ICpcblx0ICogYGBganNcblx0ICogY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd0aXRsZScpO1xuXHQgKiBsZXQgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHQgKiBzdHlsZS5pbm5lckhUTUwgPSBcInAgeyBjb2xvcjogcmVkOyB9XCI7XG5cdCAqIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcblx0ICogZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHQgKiByZXR1cm4gZG9jLnN0eWxlU2hlZXRzWzBdO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldHxDU1NTdHlsZVNoZWV0W118c3RyaW5nfHVuZGVmaW5lZH0gQSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cyB0aGF0IGRlZmluZSB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0eWxlc2hlZXQgc2hvdWxkIGJlIGFwcGxpZWQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcihcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb24gYW5kIGluZm9ybSBlbGVtZW50c1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fVxuXHRcdC8vIDIwMjQtMDEtMjE6IHJlbW92ZSB0aGlzLmRlZmF1bHRzLCBvdGhlcndpc2UgaXQgd2lsbCBvdmVyd3JpdGVcblx0XHQvLyB0aGUgY3VycmVudCBzZXR0aW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUuXG5cdFx0Ly8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTM2XG5cdFx0ZXh0ZW5kKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSXMgY2FsbGVkIG9uY2UgdmlhIHRoZSBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgZXF1aXBwZWQgd2l0aCB1cGRhdGUgZm9yIHRoZSBkeW5hbWljIGNoYW5nZSBvZiB0aGUgZG9tLlxuXHQgKiBUaGUgZnVuY3Rpb25zIHJldHVybmVkIGhlcmUgY2FuIGJlIHVzZWQgYXMgcGlwZSBmdW5jdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgZGVmaW5lZC4gSW4gdGhlIHRlbXBsYXRlIHlvdSBjYW4gdXNlIGl0IGFzIGZvbGxvd3M6XG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG15LWVsZW1lbnQgZGF0YS1tb25zdGVyLW9wdGlvbi10cmFuc2Zvcm1lcj1cInBhdGg6bXktdmFsdWUgfCBjYWxsOm15LXRyYW5zZm9ybWVyXCI+PC9teS1lbGVtZW50PlxuXHQgKiBgYGBcblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHQgKiAgICByZXR1cm4ge1xuXHQgKiAgICAgICBcIm15LXRyYW5zZm9ybWVyXCI6ICh2YWx1ZSkgPT4ge1xuXHQgKiAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgV2VydCkge1xuXHQgKiAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIFwiIVwiO1xuXHQgKiAgICAgICAgICAgY2FzZSBcIlphaGxcIjpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuXHQgKiAgICAgICAgICAgZGVmYXVsdDpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAqICAgICAgICAgICB9XG5cdCAqICAgIH1cblx0ICogICAgfTtcblx0ICogIH07XG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICogQHNpbmNlIDIuNDMuMFxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICogMS4gRXh0cmFjdHMgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBhbmQgdGhlIHNjcmlwdCB0YWcgb2YgdGhlIGVsZW1lbnQgYW5kIHNldHMgdGhlbS5cblx0ICogMi4gSW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuXG5cdCAqIDMuIEluaXRpYWxpemVzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuXG5cdCAqIDQuIEluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHMuXG5cdCAqIDUuIEF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fSAtIFRoZSB1cGRhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0bGV0IGVsZW1lbnRzO1xuXHRcdGxldCBub2RlTGlzdDtcblxuXHRcdC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGVtXG5cdFx0Y29uc3QgQXR0cmlidXRlT3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHRoaXMpO1xuXHRcdGlmIChcblx0XHRcdGlzT2JqZWN0KEF0dHJpYnV0ZU9wdGlvbnMpICYmXG5cdFx0XHRPYmplY3Qua2V5cyhBdHRyaWJ1dGVPcHRpb25zKS5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoQXR0cmlidXRlT3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gc2NyaXB0IHRhZyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBTY3JpcHRPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbCh0aGlzKTtcblx0XHRpZiAoaXNPYmplY3QoU2NyaXB0T3B0aW9ucykgJiYgT2JqZWN0LmtleXMoU2NyaXB0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKFNjcmlwdE9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXRcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIGZhbHNlKSAhPT0gZmFsc2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRTaGFkb3dSb290LmNhbGwodGhpcyk7XG5cdFx0XHRcdGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LmNoaWxkTm9kZXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRDU1NTdHlsZXNoZWV0LmNhbGwodGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGVsZW1lbnRzIGFyZSBub3QgZm91bmQgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCwgaW5pdGlhbGl6ZSB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50XG5cdFx0aWYgKCEoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcblx0XHRcdGluaXRIdG1sQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLmNoaWxkTm9kZXM7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzXG5cdFx0aW5pdEZyb21DYWxsYmFja0hvc3QuY2FsbCh0aGlzKTtcblx0XHR0cnkge1xuXHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFsuLi5lbGVtZW50cywgLi4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyldKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdH1cblxuXHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSA9IGNsb25lKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0KTtcblxuXHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0bm9kZUxpc3QsXG5cdFx0XHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdFx0XHR0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdC8vIEF0dGFjaCBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuXHRcdGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZz8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBhZHZhbmNlZCB1c2Vycy5cblx0ICogVGhlIHJlc3VsdCBpcyBhIGNsb25lIG9mIHRoZSBpbnRlcm5hbCBkYXRhLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdGdldEludGVybmFsVXBkYXRlQ2xvbmVEYXRhKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKiBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBpZiBub3QsIGNhbGxzIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG5cdFx0aWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG5cdFx0XHR0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIGNsZWFuIHVwIGNvZGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRhZG9wdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQsIG9yIHJlcGxhY2VkLiBBbHNvIGNhbGxlZCBmb3IgaW5pdGlhbFxuXHQgKiB2YWx1ZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciwgb3IgdXBncmFkZWQuIE5vdGU6IG9ubHkgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG9ic2VydmVkQXR0cmlidXRlc1xuXHQgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbFxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XG5cdFx0aWYgKGF0dHJOYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiKSkge1xuXHRcdFx0c2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0YXR0ck5hbWUsXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0/LlthdHRyTmFtZV07XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG5ld1ZhbCwgb2xkVmFsKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEBzaW5jZSAxLjE5LjBcblx0ICovXG5cdGhhc05vZGUobm9kZSkge1xuXHRcdGlmIChjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcywgdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuXHRcdHJldHVybiBjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgbmFtZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuXHRpZiAoIWlzU3RyaW5nKGNhbGxCYWNrRnVuY3Rpb25OYW1lKSB8fCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiB0aGlzKSB7XG5cdFx0cmV0dXJuIHRoaXNbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHR9XG5cblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcblx0XHRpZiAoIXRhcmdldElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcblx0XHRmb3IgKGNvbnN0IGlkIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHModGhpcywgdGFyZ2V0SWQpO1xuXHRcdFx0aWYgKCEoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGhvc3RbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdHRoaXMsXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcblx0KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZVxuICogYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIGFuZCBpZiBub3QsIHRoZSBkZWZhdWx0IGNhbGxiYWNrXG4gKiBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2AgaXMgY2FsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoaXNcbiAqIGVsZW1lbnQgYW5kIGluIHRoZSBob3N0IGVsZW1lbnQuIElmIHRoZSBjYWxsYmFjayBpcyBmb3VuZCwgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS9kZWZpbmUjcHJvdmlkaW5nX2FfY29uc3RydWN0aW9uX2NhbGxiYWNrXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdEZyb21DYWxsYmFja0hvc3QoKSB7XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG5cdC8vIElmIHRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgdXNlIGl0cyB2YWx1ZSBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spKSB7XG5cdFx0Y2FsbEJhY2tGdW5jdGlvbk5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyk7XG5cdH1cblxuXHQvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuXHRjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgY2FsbEJhY2tGdW5jdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IGNyZWF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChcblx0XHRtdXRhdGlvbnMsXG5cdFx0b2JzZXJ2ZXIsXG5cdCkge1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcblx0XHRcdFx0c2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG5cdFx0XHRcdFx0bXV0YXRpb24uYXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRtdXRhdGlvbi5vbGRWYWx1ZSxcblx0XHRcdFx0XHRtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0dHJ5IHtcblx0XHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoc2VsZiwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0fVxufVxuXG4vKipcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5DaGlsZE5vZGUobm9kZSkge1xuXHRpZiAodGhpcy5jb250YWlucyhub2RlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKGUuY29udGFpbnMobm9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaXNhYmxlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBmbGFnID0gc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKTtcblxuXHRcdFx0aWYgKGZsYWcgPT09IGxhc3REaXNhYmxlZFZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERpc2FibGVkVmFsdWUgPSBmbGFnO1xuXG5cdFx0XHRpZiAoIShzZWxmLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID1cblx0XHRcdFx0XCJidXR0b24sIGNvbW1hbmQsIGZpZWxkc2V0LCBrZXlnZW4sIG9wdGdyb3VwLCBvcHRpb24sIHNlbGVjdCwgdGV4dGFyZWEsIGlucHV0LCBbZGF0YS1tb25zdGVyLW9iamVjdGxpbmtdXCI7XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IHNlbGYuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0bGV0IG5vZGVMaXN0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFtcblx0XHRcdFx0XHQuLi5lbGVtZW50cyxcblx0XHRcdFx0XHQuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgWy4uLm5vZGVMaXN0XSkge1xuXHRcdFx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCwgXCJcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIG5vdCBpbml0aWFsaXNlZFxuXHRcdFx0aWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5mb3JtIGV2ZXJ5IGVsZW1lbnRcblx0XHRcdGNvbnN0IHVwZGF0ZXJzID0gZ2V0TGlua2VkT2JqZWN0cyhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpc3Qgb2YgdXBkYXRlcnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVyIG9mIGxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gY2xvbmUoc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0Ly8gZGlzYWJsZWRcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcoKSB7XG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpLFxuXHQpO1xuXHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdFx0XHQpfSkgYnV0IG5vdCBmb3VuZC5gLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0bGV0IG9iaiA9IHt9O1xuXG5cdHRyeSB7XG5cdFx0b2JqID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG5vZGUudGV4dENvbnRlbnQudHJpbSgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgd2hlbiBhbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2NyaXB0IHRhZyB0aGVyZSB3YXMgYW4gZXJyb3IuICR7ZX1gLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcygpIHtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgJHtBVFRSSUJVVEVfT1BUSU9OU30gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TLFxuXHRcdFx0XHQpfSkuJHtlfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIEpTT04gZGF0YSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIEpTT04gZGF0YSB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEpTT04gZGF0YSBpcyBub3QgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEh0bWxDb250ZW50fVxuICovXG5mdW5jdGlvbiBpbml0SHRtbENvbnRlbnQoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRsZXQgaHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKGlzU3RyaW5nKGh0bWwpICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0XHRcdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdFx0XHRodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nLCB7fSkuZm9ybWF0KGh0bWwpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE2LjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIGluaXRDU1NTdHlsZXNoZWV0KCkge1xuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVTaGVldCA9IHRoaXMuY29uc3RydWN0b3IuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXG5cdGlmIChzdHlsZVNoZWV0IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGlmIChzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBbc3R5bGVTaGVldF07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQXJyYXkoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCBhc3NpZ24gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHMgb2Ygc3R5bGVTaGVldCkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKHMpKSB7XG5cdFx0XHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzLnRyaW0oKTtcblx0XHRcdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdFx0XHRzdHlsZS5pbm5lckhUTUwgPSB0cmltZWRTdHlsZVNoZWV0O1xuXHRcdFx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVJbnN0YW5jZShzLCBDU1NTdHlsZVNoZWV0KTtcblxuXHRcdFx0aWYgKHMuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhc3NpZ24ucHVzaChzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYXNzaWduLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBhc3NpZ247XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQudHJpbSgpO1xuXHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gaHRtbCBpcyBub3Qgc2V0LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3dcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdFNoYWRvd1Jvb3QoKSB7XG5cdGxldCB0ZW1wbGF0ZTtcblx0bGV0IGh0bWw7XG5cblx0dHJ5IHtcblx0XHR0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKCFpc1N0cmluZyhodG1sKSB8fCBodG1sID09PSB1bmRlZmluZWQgfHwgaHRtbCA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaHRtbCBpcyBub3Qgc2V0LlwiKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmF0dGFjaFNoYWRvdyh7XG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIFwib3BlblwiKSxcblx0XHRkZWxlZ2F0ZXNGb2N1czogdGhpcy5nZXRPcHRpb24oXCJkZWxlZ2F0ZXNGb2N1c1wiLCB0cnVlKSxcblx0fSk7XG5cblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpIHtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdGh0bWwgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcpLmZvcm1hdChodG1sKTtcblx0fVxuXG5cdHRoaXMuc2hhZG93Um9vdC5pbm5lckhUTUwgPSBodG1sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXcgZWxlbWVudC4gVGhlIHN0cmluZyByZXR1cm5lZCBieSBgQ3VzdG9tRWxlbWVudC5nZXRUYWcoKWAgaXMgdXNlZCBhcyB0aGUgdGFnLlxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtET01FeGNlcHRpb259IEZhaWxlZCB0byBleGVjdXRlICdkZWZpbmUnIG9uICdDdXN0b21FbGVtZW50UmVnaXN0cnknOiBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChlbGVtZW50KSB7XG5cdHZhbGlkYXRlRnVuY3Rpb24oZWxlbWVudCk7XG5cdGNvbnN0IGN1c3RvbUVsZW1lbnRzID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3VzdG9tRWxlbWVudHNcIik7XG5cdGlmIChjdXN0b21FbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY3VzdG9tRWxlbWVudHMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdH1cblxuXHRjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcblx0aWYgKCFpc1N0cmluZyh0YWcpIHx8IHRhZyA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcblx0fVxuXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQodGFnKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyByYW5kb20gfTtcblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIHVzZXMgY3J5cHQgYW5kIHJldHVybnMgYSByYW5kb20gbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDApXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IGVuZCB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMTAwMDAwMDAwMClcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5NYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG5cdGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdG1pbiA9IDA7XG5cdH1cblx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWF4ID0gTUFYO1xuXHR9XG5cblx0aWYgKG1heCA8IG1pbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5cIik7XG5cdH1cblxuXHRyZXR1cm4gTWF0aC5yb3VuZChjcmVhdGUobWluLCBtYXgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgTUFYID0gMTAwMDAwMDAwMDtcblxuTWF0aC5sb2cyID1cblx0TWF0aC5sb2cyIHx8XG5cdGZ1bmN0aW9uIChuKSB7XG5cdFx0cmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG5cdH07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKG1pbiwgbWF4KSB7XG5cdGxldCBjcnlwdDtcblx0Y29uc3QgZ2xvYmFsUmVmZXJlbmNlID0gZ2V0R2xvYmFsKCk7XG5cblx0Y3J5cHQgPVxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJtc0NyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0dW5kZWZpbmVkO1xuXG5cdGlmICh0eXBlb2YgY3J5cHQgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGNyeXB0XCIpO1xuXHR9XG5cblx0bGV0IHJ2YWwgPSAwO1xuXHRjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcblx0aWYgKHJhbmdlIDwgMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cIik7XG5cdH1cblxuXHRjb25zdCBiaXRzTmVlZGVkID0gTWF0aC5jZWlsKE1hdGgubG9nMihyYW5nZSkpO1xuXHRpZiAoYml0c05lZWRlZCA+IDUzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwid2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cIik7XG5cdH1cblx0Y29uc3QgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwoYml0c05lZWRlZCAvIDgpO1xuXHRjb25zdCBtYXNrID0gTWF0aC5wb3coMiwgYml0c05lZWRlZCkgLSAxO1xuXG5cdGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzTmVlZGVkKTtcblx0Y3J5cHQuZ2V0UmFuZG9tVmFsdWVzKGJ5dGVBcnJheSk7XG5cblx0bGV0IHAgPSAoYnl0ZXNOZWVkZWQgLSAxKSAqIDg7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuXHRcdHJ2YWwgKz0gYnl0ZUFycmF5W2ldICogTWF0aC5wb3coMiwgcCk7XG5cdFx0cCAtPSA4O1xuXHR9XG5cblx0cnZhbCA9IHJ2YWwgJiBtYXNrO1xuXG5cdGlmIChydmFsID49IHJhbmdlKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZShtaW4sIG1heCk7XG5cdH1cblxuXHRpZiAocnZhbCA8IG1pbikge1xuXHRcdHJ2YWwgKz0gbWluO1xuXHR9XG5cblx0cmV0dXJuIHJ2YWw7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZGVhZCBtYW4ncyBzd2l0Y2ggYWxsb3dzIHRvIHNldCBhIHRpbWVyIHdoaWNoIGNhbiBiZSByZXNldCBhZ2FpbiBhbmQgYWdhaW4gd2l0aGluIGEgZGVmaW5lZCBwZXJpb2Qgb2YgdGltZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI5LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgRGVhZE1hbnNTd2l0Y2ggZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgZGVhZCBtYW4ncyBzd2l0Y2hcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfSBkZWxheVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWxheSwgY2FsbGJhY2spIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW5pdC5jYWxsKHRoaXMsIHZhbGlkYXRlSW50ZWdlcihkZWxheSksIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ8dW5kZWZpbmVkfSBbZGVsYXldXG5cdCAqL1xuXHR0b3VjaChkZWxheSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0ludGVnZXIoZGVsYXkpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdID0gZGVsYXk7XG5cdFx0fSBlbHNlIGlmIChkZWxheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhcmd1bWVudFwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cblx0XHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENhbGxiYWNrKCkge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPSB0cnVlO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tcIl0oKTtcblx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZGVsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGluaXQoZGVsYXksIGNhbGxiYWNrKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdGNhbGxiYWNrLFxuXHRcdGRlbGF5LFxuXHRcdGlzQWxyZWFkeVJ1bjogZmFsc2UsXG5cdFx0dGltZXI6IHVuZGVmaW5lZCxcblx0fTtcblxuXHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQcm9jZXNzaW5nIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2FsbGJhY2sge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGNhbGxiYWNrOiB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSxcblx0XHRcdHRpbWU6IHZhbGlkYXRlSW50ZWdlcih0aW1lID8/IDApLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtICB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Z2V0R2xvYmFsRnVuY3Rpb24oXCJzZXRUaW1lb3V0XCIpKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrKGRhdGEpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0udGltZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0byBleGVjdXRlIHNldmVyYWwgZnVuY3Rpb25zIGluIG9yZGVyLlxuICpcbiAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG4gKiBJbiB0aGUgZXhhbXBsZVxuICpcbiAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcbiAqXG4gKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuICpcbiAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuICpcbiAqIFRoZSByZXN1bHQgb2YgYHJ1bigpYCBpcyBhIHByb21pc2UuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3V0aWwvcHJvY2Vzc2luZy5tanNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIxLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgUHJvY2Vzc2luZyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBQcm9jZXNzaW5nXG5cdCAqXG5cdCAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG5cdCAqIEluIHRoZSBleGFtcGxlXG5cdCAqXG5cdCAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcblx0ICpcblx0ICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cblx0ICpcblx0ICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG5cdCAqXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7Li4uKGludHxmdW5jdGlvbil9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRxdWV1ZTogbmV3IFF1ZXVlKCksXG5cdFx0fTtcblxuXHRcdGxldCB0aW1lID0gMDtcblxuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGFyZ10gb2YgT2JqZWN0LmVudHJpZXMoYXJncykpIHtcblx0XHRcdGlmIChpc0ludGVnZXIoYXJnKSAmJiBhcmcgPj0gMCkge1xuXHRcdFx0XHR0aW1lID0gYXJnO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhhcmcsIHRpbWUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFx0XCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBmdW5jdGlvbiB3aXRoIHRoZSBkZXNpcmVkIHRpbWVvdXRcblx0ICogSWYgbm8gdGltZW91dCBpcyBzcGVjaWZpZWQsIHRoZSB0aW1lb3V0IG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB1c2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRhZGQoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGNhbGxiYWNrLCB0aW1lKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGluIG9yZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLnBvbGwoKTtcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWxsYmFjay5ydW4oZGF0YSkudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW4ocmVzdWx0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci11cmxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhlIGNvbnRyb2wuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1VSTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dXJsYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlbG9hZGAgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVsb2FkLlxuICpcbiAqIHZhbGlkIHZhbHVlczogb25zaG93XG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9SRUxPQUQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbG9hZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS45LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WSVNJQklMSVRZID0gYCR7QVRUUklCVVRFX1BSRUZJWH12aXNpYmlsaXR5YDtcbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS45LjBcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMzIuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWNsYXNzYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOVEVORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW50ZW5kYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbmBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0hBU19DSElMRFJFTiA9IGAke0FUVFJJQlVURV9QUkVGSVh9aGFzLWNoaWxkcmVuYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2VgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBkYXRhc291cmNlLlxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtYXJndW1lbnRzYCBjYW4gYmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2UtYXJndW1lbnRzYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7XG5cdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcblx0QVRUUklCVVRFX0ZPUk1fVVJMLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcblx0QVRUUklCVVRFX0lOVEVORCxcblx0QVRUUklCVVRFX1ZJU0lCSUxJVFksXG5cdEFUVFJJQlVURV9GT1JNX1JFTE9BRCxcblx0QVRUUklCVVRFX0hBU19DSElMRFJFTixcblx0QVRUUklCVVRFX0JVVFRPTl9DTEFTUyxcbn07XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7VGFic1N0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUYWJzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFRhYnNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHRhYnMgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGFibGUtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMSk7LS1tb25zdGVyLXRhYmxlLWNvbG9yOnZhcigtLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTYpOy0tbW9uc3Rlci10YWJsZS1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMik7LS1tb25zdGVyLXRhYmxlLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTYpOy0tbW9uc3Rlci10YWJsZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yKTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MXB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10YWJsZS1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRhYmxlLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGFibGUtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10YWJsZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtdGFibGUtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtdGFibGUtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRhYmxlLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtdGFibGUtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtdGFibGUtZWxlbWVudHMsLm1vbnN0ZXItdGhlbWUtdGFibGUtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRhYmxlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRhYmxlLWNvbG9yKX0ubW9uc3Rlci10aGVtZS10YWJsZS1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10YWJsZS1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbi5oaWRkZW57ZGlzcGxheTpub25lfW5hdltkYXRhLW1vbnN0ZXItcm9sZT1uYXZde2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gLnJlbW92ZS10YWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MTZweDttaW4taGVpZ2h0OjE2cHg7b3JkZXI6Mjt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBzcGFue2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O3doaXRlLXNwYWNlOnByZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b257YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6c3RyZXRjaDtib3JkZXI6bm9uZTtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O21hcmdpbi1yaWdodDouNzVyZW07b3V0bGluZTpub25lO3BhZGRpbmc6LjM3NXJlbSAwO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246Y29sb3IgLjhzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpIWltcG9ydGFudH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKSFpbXBvcnRhbnR9fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkaXNhYmxlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXXthbGlnbi1zZWxmOmNlbnRlcjtib3JkZXI6MDtvcmRlcjoyO3RvdWNoLWFjdGlvbjpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXdpZHRoOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIGltZ3toZWlnaHQ6MS4zcmVtO21hcmdpbi1sZWZ0Oi40cmVtO3dpZHRoOjEuM3JlbX06OnNsb3R0ZWQoOm5vdChbc2xvdF0pOm5vdCguYWN0aXZlKSl7ZGlzcGxheTpub25lfTo6c2xvdHRlZCgqKXthbGlnbi1zZWxmOmNlbnRlcn06OnNsb3R0ZWQoW3Nsb3RdKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX06OnNsb3R0ZWQoW3Nsb3Q9c3RhcnRdKXttYXJnaW4tcmlnaHQ6Ljc1cmVtO29yZGVyOjB9OjpzbG90dGVkKFtzbG90PWVuZF0pe21hcmdpbi1sZWZ0Oi43NXJlbTtvcmRlcjozfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pe2JvcmRlcjowO2p1c3RpZnktY29udGVudDpsZWZ0O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6MTVweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246aG92ZXIsW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXI6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCkhaW1wb3J0YW50fX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmZ1bmN0aW9uIGZpbmRTaGFkb3dSb290KGVsZW1lbnQpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSByZXR1cm4gZWxlbWVudDtcblx0aWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXIgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRBbmRBc3NpZ25Db250ZW50KGVsZW1lbnQsIHVybCwgb3B0aW9ucywgZmlsdGVyKSB7XG5cdHJldHVybiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0bGV0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG5cdFx0aWYgKGlzU3RyaW5nKGZpbHRlcikgJiYgZmlsdGVyICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Yy5pbm5lckhUTUwgPSBjb250ZW50O1xuXHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBjLnF1ZXJ5U2VsZWN0b3JBbGwoZmlsdGVyKS5lbnRyaWVzKCkpIHtcblx0XHRcdFx0dC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGVudCA9IHQuaW5uZXJIVE1MO1xuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHQuaW5uZXJIVE1MID0gY29udGVudDtcblxuXHRcdGNvbnN0IHNjcmlwdHMgPSB0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzY3JpcHRcIik7XG5cdFx0Zm9yIChjb25zdCBbLCBzY3JpcHRdIG9mIHNjcmlwdHMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRcdHMuaW5uZXJIVE1MID0gc2NyaXB0LmlubmVySFRNTDtcblx0XHRcdGlmIChzY3JpcHQuc3JjKSBzLnNyYyA9IHNjcmlwdC5zcmM7XG5cdFx0XHRpZiAoc2NyaXB0LnR5cGUpIHMudHlwZSA9IHNjcmlwdC50eXBlO1xuXHRcdFx0aWYgKHNjcmlwdC5hc3luYykgcy5hc3luYyA9IHNjcmlwdC5hc3luYztcblx0XHRcdGlmIChzY3JpcHQuZGVmZXIpIHMuZGVmZXIgPSBzY3JpcHQuZGVmZXI7XG5cdFx0XHRpZiAoc2NyaXB0LmNyb3NzT3JpZ2luKSBzLmNyb3NzT3JpZ2luID0gc2NyaXB0LmNyb3NzT3JpZ2luO1xuXHRcdFx0aWYgKHNjcmlwdC5pbnRlZ3JpdHkpIHMuaW50ZWdyaXR5ID0gc2NyaXB0LmludGVncml0eTtcblx0XHRcdGlmIChzY3JpcHQucmVmZXJyZXJQb2xpY3kpIHMucmVmZXJyZXJQb2xpY3kgPSBzY3JpcHQucmVmZXJyZXJQb2xpY3k7XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuXHRcdFx0dC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9IHQuaW5uZXJIVE1MO1xuXG5cdFx0Y29uc3Qgcm9vdCA9IGZpbmRTaGFkb3dSb290KGVsZW1lbnQpO1xuXHRcdGlmIChyb290ICE9PSBudWxsKSB7XG5cdFx0XHRlbGVtZW50ID0gcm9vdC5ob3N0O1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudChlbGVtZW50LCBcIm1vbnN0ZXItZmV0Y2hlZFwiLCB7XG5cdFx0XHR1cmwsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKSB7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdHJldHVybiBmZXRjaCh2YWxpZGF0ZVN0cmluZyh1cmwpLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdC8vIFRoZSBvayByZWFkLW9ubHkgcHJvcGVydHkgb2YgdGhlIFJlc3BvbnNlIGludGVyZmFjZSBjb250YWlucyBhXG5cdFx0Ly8gQm9vbGVhbiBzdGF0aW5nIHdoZXRoZXIgdGhlIHJlc3BvbnNlIHdhcyBzdWNjZXNzZnVsIChzdGF0dXMgaW4gdGhlIHJhbmdlIDIwMC0yOTkpIG9yIG5vdC5cblx0XHRpZiAocmVzcG9uc2U/Lm9rICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNwb25zZS90eXBlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFtcImVycm9yXCIsIFwib3BhcXVlXCIsIFwib3BhcXVlcmVkaXJlY3RcIl0uaW5kZXhPZihyZXNwb25zZT8udHlwZSkgIT09IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXR1c0NsYXNzID0gYCR7cmVzcG9uc2U/LnN0YXR1c31gLnN1YnN0cmluZygwLCAxKTtcblx0XHRcdHN3aXRjaCAoc3RhdHVzQ2xhc3MpIHtcblx0XHRcdFx0Y2FzZSBcIjRcIjpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNsaWVudCBlcnJvciAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGB1bmRlZmluZWQgc3RhdHVzICgke3Jlc3BvbnNlPy5zdGF0dXN9IC8gJHtyZXNwb25zZT8uc3RhdHVzVGV4dH0pIG9yIHR5cGUgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0LnRleHQoKVxuXHRcdFx0XHQudGhlbigoY29udGVudCkgPT4ge1xuXHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0Y29udGVudCxcblx0XHRcdFx0XHRcdHR5cGU6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50LCBsb2FkQ29udGVudCB9O1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1RoZW1lU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRoZW1lU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFRoZW1lU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciB0aGVtZSB7IFxuLm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLXRhYmxlLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLXRhYmxlLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10YWJsZS1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLXRhYmxlLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLXRhYmxlLWVsZW1lbnRzLC5tb25zdGVyLXRoZW1lLXRhYmxlLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10YWJsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10YWJsZS1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtdGFibGUtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGFibGUtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLCBwb3BwZXJJbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJJbnN0YW5jZVN5bWJvbCA9IFN5bWJvbChcInBvcHBlckluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyB7Q3VzdG9tRWxlbWVudH1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbW9kZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycyhtb2RlKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblx0Y29uc3QgbW9kaWZpZXJzID0gb3B0aW9ucz8uW1wibW9kaWZpZXJzXCJdO1xuXG5cdGlmICghaXNBcnJheShtb2RpZmllcnMpKSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXSA9IFtdO1xuXHR9XG5cblx0aWYgKFxuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0uZmlsdGVyKChlbnRyeSkgPT4ge1xuXHRcdFx0aWYgKGVudHJ5Py5bXCJuYW1lXCJdID09PSBcImV2ZW50TGlzdGVuZXJzXCIpIHtcblx0XHRcdFx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdFx0XHRcdGVudHJ5W1wiZW5hYmxlZFwiXSA9IHZhbGlkYXRlQm9vbGVhbihtb2RlKTtcblx0XHRcdH1cblx0XHR9KS5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5wdXNoKHtcblx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdGVuYWJsZWQ6IHZhbGlkYXRlQm9vbGVhbihtb2RlKSxcblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnNldE9wdGlvbnMob3B0aW9ucyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIkBwb3BwZXJqcy9jb3JlXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRhZGRUb09iamVjdExpbmssXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi8uLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uLy4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxufSBmcm9tIFwiLi4vZm9ybS9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IFRhYnNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90YWJzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi4vZm9ybS91dGlsL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHsgVGhlbWVTdHlsZVNoZWV0IH0gZnJvbSBcIi4uL3N0eWxlc2hlZXQvdGhlbWUubWpzXCI7XG5pbXBvcnQge1xuXHRwb3BwZXJJbnN0YW5jZVN5bWJvbCxcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsXG59IGZyb20gXCIuLi9mb3JtL3V0aWwvcG9wcGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJOYXZFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyTmF2RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5hdkVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2hhbmdlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2hhbmdlVGFiRXZlbnRIYW5kbGVyXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicmVtb3ZlVGFiRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcIm11dGF0aW9uT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRpbWVuc2lvbnNTeW1ib2wgPSBTeW1ib2woXCJkaW1lbnNpb25zXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgdGFiIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3RhYnMucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItdGFicyAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10YWJzJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItdGFicz48L21vbnN0ZXItdGFicz5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1RhYnN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10YWJzJyk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5DcmVhdGUgYSBzaW1wbGUgdGFiIGNvbnRyb2w8L2NhcHRpb24+XG4gKiA8bW9uc3Rlci10YWJzPlxuICogICAgIDxkaXYgaWQ9XCJ0YWIxXCI+VGFiIDE8L2Rpdj5cbiAqICAgICA8ZGl2IGlkPVwidGFiMlwiPlRhYiAyPC9kaXY+XG4gKiA8L21vbnN0ZXItdGFicz5cbiAqXG4gKiBAc3RhcnR1bWwgdGFicy5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIFRhYnNcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXRcbiAqIEBzdW1tYXJ5IEEgY29uZmlndXJhYmxlIHRhYiBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuZXZlbnQ6bW9uc3Rlci10YWItY2hhbmdlZFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuZXZlbnQ6bW9uc3Rlci10YWItcmVtb3ZlXG4gKi9cbmNsYXNzIFRhYnMgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFic1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubmV3LXRhYi1sYWJlbD1cIk5ldyBUYWJcIlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXNcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IGZlYXR1cmVzLm9wZW5EZWxheT01MDAgT3BlbiBkZWxheSBpbiBtaWxsaXNlY29uZHNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9Ym90dG9tIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBtb2RpZmllcnM9e25hbWU6b2Zmc2V0fSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRcIm5ldy10YWItbGFiZWxcIjogXCJOZXcgVGFiXCIsXG5cdFx0XHR9LFxuXHRcdFx0YnV0dG9uczoge1xuXHRcdFx0XHRzdGFuZGFyZDogW10sXG5cdFx0XHRcdHBvcHBlcjogW10sXG5cdFx0XHR9LFxuXHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0XG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRvcGVuRGVsYXk6IG51bGwsXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRwb3BwZXI6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0bmF2aWdhdGlvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0bW9kaWZpZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJvZmZzZXRcIixcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0b2Zmc2V0OiBbMCwgMl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXSA9IG5ldyBQYXRoZmluZGVyKHsgZGF0YToge30gfSk7XG5cblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHQvLyBzZXR1cCBzdHJ1Y3R1cmVcblx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdFx0aW5pdFBvcHBlclN3aXRjaC5jYWxsKHRoaXMpO1xuXHRcdFx0aW5pdFBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtUYWJzU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgYWN0aXZhdGVzIGEgdGFiIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBuYW1lLlxuXHQgKiBcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHt0eXBlfSBpZE9yTmFtZSAtIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSB0YWIgdG8gYWN0aXZhdGVcblx0ICogQHJldHVybiB7VGFic30gLSBUaGUgY3VycmVudCBpbnN0YW5jZVxuXHQgKi9cblx0YWN0aXZlVGFiKGlkT3JOYW1lKSB7XG5cdFx0XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XG5cdFx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKGZvdW5kID09PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gKS5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWApLmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdFxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5hbWUgb3IgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiLlxuXHQgKiBcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICogXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldEFjdGl2ZVRhYigpIHtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKTtcblx0XHRcdFx0fSBcblx0XHRcdFx0XG5cdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyU3dpdGNoKCkge1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzd2l0Y2hcIl1gKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cdGxldCBzd2l0Y2hCdXR0b247XG5cdGlmIChub2Rlcy5zaXplID09PSAwKSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKFwicGFydFwiLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHRjb25zdCBjbGFzc0xpc3QgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIpO1xuXHRcdGlmIChjbGFzc0xpc3QpIHtcblx0XHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKGNsYXNzTGlzdCk7XG5cdFx0fVxuXHRcdHN3aXRjaEJ1dHRvbi5pbm5lckhUTUwgPVxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk05LjUgMTNhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwelwiLz48L3N2Zz4nO1xuXHRcdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucHJlcGVuZChzd2l0Y2hCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IG5vZGVzLm5leHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHRzd2l0Y2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHN3aXRjaEJ1dHRvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlUG9wcGVyKCkge1xuXHRpZiAoIXRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93UG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIHRydWUpO1xuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0fSlcblx0XHQucnVuKHVuZGVmaW5lZClcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvd1BvcHBlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tuYXZFbGVtZW50U3ltYm9sXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHRuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0pLm9ic2VydmUodGhpcywge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEBleHRlcm5hbCBcImV4dGVybmFsOmNyZWF0ZVBvcHBlclwiXG4gKiBAc2VlIHtAbGluayAgUGx1Z2luc31cbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgc2VsZi5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXG5cdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdID0gY3JlYXRlUG9wcGVyKFxuXHRcdHNlbGZbc3dpdGNoRWxlbWVudFN5bWJvbF0sXG5cdFx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHRvcHRpb25zLFxuXHQpO1xuXG5cdGNvbnN0IG9ic2VydmVyMSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRsZXQgcnVuVXBkYXRlID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyMS5vYnNlcnZlKHNlbGZbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHJlZmVyZW5jZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWApO1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGNvbnN0IGlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuXHRcdGlmIChpZCA9PT0gcmVmZXJlbmNlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cdFx0XHRcblx0XHRcdGNvbnN0IG9wZW5EZWxheSA9IHBhcnNlSW50KHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMub3BlbkRlbGF5XCIpLCAxMCk7XG5cdFx0XHRjb25zb2xlLmxvZyhvcGVuRGVsYXkpXG5cdFx0XHRpZighaXNOYU4ob3BlbkRlbGF5KSAmJiBvcGVuRGVsYXk+MCkge1xuXHRcdFx0XHRub2RlLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdG5vZGUuc3R5bGUudmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXHRcdFx0XHR9LCBvcGVuRGVsYXkpO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvLyBnZXQgYWxsIGRhdGEtIGZyb20gYnV0dG9uIGFuZCBmaWx0ZXIgb3V0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzIGFuZCBkYXRhLW1vbnN0ZXItaW5zZXJ0XG5cdFx0XHRjb25zdCBkYXRhID0ge307XG5cdFx0XHRjb25zdCBtYXNrID0gW1xuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2VcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItc3RhdGVcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLW9iamVjdGxpbmtcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItcm9sZVwiLFxuXHRcdFx0XTtcblxuXHRcdFx0Zm9yIChjb25zdCBbLCBhdHRyXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtXCIpICYmIG1hc2suaW5kZXhPZihhdHRyLm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRcdGRhdGFbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IW5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkgfHxcblx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCkgPT09IFwib25zaG93XCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblx0XHRcdFx0Y29uc3QgZmlsdGVyID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRsb2FkQW5kQXNzaWduQ29udGVudChub2RlLCB1cmwsIG9wdGlvbnMsIGZpbHRlcilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1jaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1jaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdGFuZGFyZEJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdGZvciAoY29uc3QgaW5kZXggaW4gc3RhbmRhcmRCdXR0b25zKSB7XG5cdFx0Y29uc3QgYnV0dG9uID0gc3RhbmRhcmRCdXR0b25zW2luZGV4XTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1dHRvbltcInJlZmVyZW5jZVwiXSA9PT0gcmVmZXJlbmNlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgYnV0dG9ucy5zdGFuZGFyZC4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGNvbnN0IHBvcHBlckJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIik7XG5cdGZvciAoY29uc3QgaW5kZXggaW4gcG9wcGVyQnV0dG9uKSB7XG5cdFx0Y29uc3QgYnV0dG9uID0gcG9wcGVyQnV0dG9uW2luZGV4XTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1dHRvbltcInJlZmVyZW5jZVwiXSA9PT0gcmVmZXJlbmNlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgYnV0dG9ucy5wb3BwZXIuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIEFUVFJJQlVURV9ST0xFLCBcImJ1dHRvblwiKTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgZWxlbWVudC5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0c2hvdy5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogZXZlbnQ6bW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqIEBldmVudCBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItdGFiLXJlbW92ZVxuXHQgKi9cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuZXZlbnQ6bW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXHR0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtdGFiXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFwiYnV0dG9uXCIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkPSR7cmVmZXJlbmNlfV1gKTtcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1yZW1vdmVcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JzZXJ2ZWROb2RlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZWROb2RlKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChoYXNPYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBjb25zdHJ1Y3QgbW9uaXRvcnMgYSBub2RlIHdoZXRoZXIgaXQgaXMgZGlzYWJsZWQgb3IgbW9kaWZpZWRcblx0ICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRpZiAoaXNBcnJheShtdXRhdGlvbnMpKSB7XG5cdFx0XHRjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9ucy5wb3AoKTtcblx0XHRcdGlmIChtdXRhdGlvbiBpbnN0YW5jZW9mIE11dGF0aW9uUmVjb3JkKSB7XG5cdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwoc2VsZik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRvYnNlcnZlci5vYnNlcnZlKG9ic2VydmVkTm9kZSwge1xuXHRcdGNoaWxkTGlzdDogZmFsc2UsXG5cdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRzdWJ0cmVlOiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcblx0XHRcdFwiZGlzYWJsZWRcIixcblx0XHRcdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRdLFxuXHR9KTtcblxuXHRhZGRUb09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sLCBvYnNlcnZlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUk9MRX09bmF2XWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlck5hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXItbmF2XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICpcbiAqL1xuZnVuY3Rpb24gaW5pdFRhYkJ1dHRvbnMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGxldCBhY3RpdmVSZWZlcmVuY2U7XG5cblx0Y29uc3QgZGltZW5zaW9uc0NhbGN1bGF0ZWQgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcblx0XHRcImRhdGEuY2FsY3VsYXRlZFwiLFxuXHRcdGZhbHNlLFxuXHQpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSBbXTtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIG51bGwpOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblxuXHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRsZXQgbGFiZWwgPSBnZXRCdXR0b25MYWJlbC5jYWxsKHRoaXMsIG5vZGUpO1xuXG5cdFx0bGV0IHJlZmVyZW5jZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJpZFwiKSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHR9XG5cblx0XHRsZXQgZGlzYWJsZWQ7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikgfHwgbm9kZS5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghcmVmZXJlbmNlKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBuZXcgSUQoXCJ0YWJcIikudG9TdHJpbmcoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgcmVmZXJlbmNlKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmApKSB7XG5cdFx0XHRsYWJlbCA9IGA8c3BhbiBwYXJ0PVwibGFiZWxcIj4ke2xhYmVsfTwvc3Bhbj48aW1nIHBhcnQ9XCJpY29uXCIgc3JjPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XHQpfVwiPmA7XG5cdFx0fVxuXG5cdFx0bGV0IHJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXJlbW92YWJsZWApKSB7XG5cdFx0XHRyZW1vdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLm1hdGNoZXMoXCIuYWN0aXZlXCIpID09PSB0cnVlICYmIGRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0XHRhY3RpdmVSZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhdGUgPSBcIlwiO1xuXHRcdGNvbnN0IGNsYXNzZXMgPSBkaW1lbnNpb25zQ2FsY3VsYXRlZCA/IFwiXCIgOiBcImludmlzaWJsZVwiO1xuXG5cdFx0YnV0dG9ucy5wdXNoKHtcblx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRjbGFzczogY2xhc3Nlcyxcblx0XHRcdGRpc2FibGVkLFxuXHRcdFx0cmVtb3ZlLFxuXHRcdH0pO1xuXG5cdFx0YXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlci5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBbXSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibWFya2VyXCIsIHJhbmRvbSgpKTtcblxuXHRyZXR1cm4gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eS5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdGlmIChhY3RpdmVSZWZlcmVuY2UpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke2FjdGl2ZVJlZmVyZW5jZX1cIl1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0c2hvdy5jYWxsKHRoaXMsIGJ1dHRvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zKCkge1xuXHRpZiAodGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpICE9PSB0cnVlKSB7XG5cdFx0Y2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEJ1dHRvblZpc2liaWxpdHkoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0Y29uc3QgZGVmQ291bnQgPSBzZWxmLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZG9tQ291bnQgPSBzZWxmW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIl0nLFxuXHRcdFx0KS5sZW5ndGg7XG5cblx0XHRcdC8vIGluIGRyYXdpbmdcblx0XHRcdGlmIChkZWZDb3VudCAhPT0gZG9tQ291bnQpIHJldHVybjtcblxuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbChzZWxmKTtcblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW25hdkVsZW1lbnRTeW1ib2xdLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERpbVZhbHVlKHZhbHVlKSB7XG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IHZhbHVlQXNJbnQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG5cdGlmIChpc05hTih2YWx1ZUFzSW50KSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlQXNJbnQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY2FsY0JveFdpZHRoKG5vZGUpIHtcblx0Y29uc3QgZGltID0gZ2V0R2xvYmFsKFwid2luZG93XCIpLmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cdGNvbnN0IGJvdW5kaW5nID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRyZXR1cm4gKFxuXHRcdGdldERpbVZhbHVlKGRpbVtcImJvcmRlci1sZWZ0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShib3VuZGluZ1tcIndpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLXJpZ2h0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLXJpZ2h0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IFtdO1xuXHRjb25zdCBwb3BwZXJCdXR0b25zID0gW107XG5cblx0bGV0IHN1bSA9IDA7XG5cdGNvbnN0IHNwYWNlID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLnNwYWNlXCIpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdGZvciAoY29uc3QgWywgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXG5cdFx0c3VtICs9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKGBkYXRhLmJ1dHRvbi4ke3JlZn1gKTtcblxuXHRcdGlmIChzdW0gPiBzcGFjZSkge1xuXHRcdFx0cG9wcGVyQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFuZGFyZEJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgc3RhbmRhcmRCdXR0b25zKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBwb3BwZXJCdXR0b25zKTtcblxuXHRpZiAodGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmIChwb3BwZXJCdXR0b25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU5hdmlnYXRpb25CdXR0b25zRGltZW5zaW9ucygpIHtcblx0Y29uc3Qgd2lkdGggPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG5cdGxldCBzdGFydEVuZFdpZHRoID0gMDtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwic3RhcnRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJlbmRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5zcGFjZVwiLCB3aWR0aCAtIHN0YXJ0RW5kV2lkdGggLSAyKTtcblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnZpc2libGVcIiwgISh3aWR0aCA9PT0gMCkpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikuY29uY2F0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiksXG5cdCk7XG5cblx0Zm9yIChjb25zdCBbaSwgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgOnNjb3BlID4gWyR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlPVwiJHtyZWZ9XCJdYCxcblx0XHQpO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpIGNvbnRpbnVlO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXG5cdFx0XHRgZGF0YS5idXR0b24uJHtyZWZ9YCxcblx0XHRcdGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIGVsZW1lbnQpLFxuXHRcdCk7XG5cdFx0YnV0dG9uW1wiY2xhc3NcIl0gPSBuZXcgVG9rZW5MaXN0KGJ1dHRvbltcImNsYXNzXCJdKVxuXHRcdFx0LnJlbW92ZShcImludmlzaWJsZVwiKVxuXHRcdFx0LnRvU3RyaW5nKCk7XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YG5hdlske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1uYXZdID4gc2xvdC5pbnZpc2libGUsIHNsb3RbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9c2xvdF0uaW52aXNpYmxlYCxcblx0KTtcblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBzbG90cy5lbnRyaWVzKCkpIHtcblx0XHRzbG90LmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZpc2libGVcIik7XG5cdH1cblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCB0cnVlKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7XG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXIsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcblx0XHRcdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMucG9wcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1wb3BwZXItYXJyb3c+PC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMucG9wcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInBvcHBlclwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUYWJzKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtNZXNzYWdlU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgTWVzc2FnZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgbWVzc2FnZSB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1fS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS10YWJsZS1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS10YWJsZS1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGFibGUtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS10YWJsZS1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS10YWJsZS1lbGVtZW50cywubW9uc3Rlci10aGVtZS10YWJsZS1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGFibGUtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGFibGUtY29sb3IpfS5tb25zdGVyLXRoZW1lLXRhYmxlLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRhYmxlLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4LFtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd31bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzo4cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF17ZmxleC1ncm93OjI7QG1peGlucyBwYXJhZ3JhcGh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi01cHg7d2lkdGg6MTZweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJTeW1ib2wgPSBTeW1ib2woXCJ0aW1lclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlZW50ZXJFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWxlYXZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbWVzc2FnZS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnkuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2UgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+PC9tb25zdGVyLW5vdGlmeS1tZXNzYWdlPlxuICogYGBgXG4gKlxuICogb3IgdXNpbmcgSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gKiBgYGBcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanNcbiAqIEBzdGFydHVtbCBtZXNzYWdlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTWVzc2FnZVxuICogQGVuZHVtbFxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnlcbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuZXZlbnQ6bW9uc3Rlci14eHh4XG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiA8bW9uc3Rlci1tZXNzYWdlIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbWVzc2FnZT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICB0aW1lb3V0OiAzMDAwLFxuXHQgKiAgICAgICAgZmVhdHVyZXM6IHtcblx0ICogICAgICAgICAgY2xlYXI6IHRydWUsXG5cdCAqICAgICAgICAgIGRpc2FwcGVhcjogdHJ1ZVxuXHQgKiAgICAgICAgfVxuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2ludGVnZXJ9IHRpbWVvdXQgdGltZSBpbiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuIFRoZSB0aW1lb3V0IGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGZlYXR1cmUgYGRpc2FwcGVhcmAuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyIHNob3cgY2xlYXIgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZGlzYXBwZWFyIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBtZXNzYWdlIGFmdGVyIHRoZSB0aW1lb3V0XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0aW1lb3V0OiA2MDAwLFxuXHRcdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRcdGNsZWFyOiB0cnVlLFxuXHRcdFx0XHRcdGRpc2FwcGVhcjogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1lc3NhZ2V9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW01lc3NhZ2VTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5kaXNhcHBlYXJcIikgPT09IHRydWUpIHtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdGFydEZhZGVvdXQoKSB7XG5cdGlmICghdGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fSwgdGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTZWxmKCkge1xuXHRzdG9wRmFkZW91dCgpO1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQoXCJmYWRlb3V0XCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXMucmVtb3ZlKCk7XG5cdH0sIDIwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc3RvcEZhZGVvdXQoKSB7XG5cdGlmICh0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbdGltZXJTeW1ib2xdKTtcblx0XHR0aGlzW3RpbWVyU3ltYm9sXSA9IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdGltZW91dCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9QUkVGSVggKyBcInRpbWVvdXRcIik7XG5cdGlmIChpc1N0cmluZyh0aW1lb3V0KSkge1xuXHRcdHRyeSB7XG5cdFx0XHRvcHRpb25zW1widGltZW91dFwiXSA9IHBhcnNlSW50KHRpbWVvdXQsIDEwKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSArIFwiLCBcIiArIGUudG9TdHJpbmcoKSksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNZXNzYWdlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW3JlbW92ZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPXJlbW92ZV1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCB0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWxlYXZlXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwicmVtb3ZlXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmVtb3ZlU2VsZi5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwiY2xpY2tcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwidG91Y2hcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIiBwYXJ0PVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2xvc2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2UpO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge05vdGlmeVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBOb3RpZnlTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgTm90aWZ5U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBub3RpZnkgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOjA7bWF4LWhlaWdodDoxMDB2SDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjI1cmVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWxlZnRde2xlZnQ6MDtyaWdodDphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXJpZ2h0XXtsZWZ0OmF1dG87cmlnaHQ6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Ym90dG9tXXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj10b3Bde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLWNvbG9yLHJnYmEoMCwwLDAsLjEpKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItcmFkaXVzLC4yNXJlbSk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItc3R5bGUsc29saWQpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXdpZHRoLDFweCk7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07bWFyZ2luOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tdG9wLDE1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tcmlnaHQsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWJvdHRvbSwwKSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWxlZnQsMCk7bWF4LWhlaWdodDoyMDBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy10b3AsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWJvdHRvbSw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWxlZnQsNXB4KTtwb2ludGVyLWV2ZW50czphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0Oy1tb3otdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2VdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV0uZmFkZW91dHtib3JkZXI6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6MDtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7dHJhbnNpdGlvbjphbGwgLjJzIGN1YmljLWJlemllcigxLC0uMDQsMCwxLjAzKX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9jb21wb25lbnQtZm9ybVxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBOb3RpZnlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi8uLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb3RpZnkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicXVldWVcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbm90aWZ5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5PjwvbW9uc3Rlci1ub3RpZnk+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBFdmVudHNcbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXG4gKiBAc3RhcnR1bWwgbm90aWZ5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTm90aWZ5XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnlcbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICovXG5jbGFzcyBOb3RpZnkgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW3F1ZXVlU3ltYm9sXSA9IG5ldyBRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbm90aWZ5PlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIG9yaWVudGF0aW9uOiAncmlnaHQgdG9wJ1xuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0b3JpZW50YXRpb246IFwibGVmdCB0b3BcIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vdGlmeX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0d2hpbGUgKHRoaXNbcXVldWVTeW1ib2xdLmlzRW1wdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5wdXNoKHRoaXNbcXVldWVTeW1ib2xdLnBvbGwoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW5vdGlmeVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTm90aWZ5U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTm90aWZ5fVxuXHQgKi9cblx0cHVzaChtZXNzYWdlKSB7XG5cdFx0bGV0IG1lc3NhZ2VFbGVtZW50ID0gbWVzc2FnZTtcblx0XHRpZiAoIShtZXNzYWdlIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdGNvbnN0IHRleHQgPSB2YWxpZGF0ZVN0cmluZyhtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIik7XG5cdFx0XHRtZXNzYWdlRWxlbWVudC5zZXRPcHRpb24oXCJjb250ZW50XCIsIHRleHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UobWVzc2FnZUVsZW1lbnQsIE1lc3NhZ2UpO1xuXHRcdG1lc3NhZ2VFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlXCIpO1xuXG5cdFx0Ly8gaWYgbm90IGNvbm5lY3RlZCwgYWRkIHRvIHF1ZXVlXG5cdFx0aWYgKCF0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR0aGlzW3F1ZXVlU3ltYm9sXS5hZGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiLCB7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCxcblx0XHR9KTtcblxuXHRcdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0uYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250YWluZXJdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE5vdGlmeSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7U3BsaXRTY3JlZW5TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3BsaXRTY3JlZW5TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgU3BsaXRTY3JlZW5TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHNwbGl0c2NyZWVuIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztoZWlnaHQ6YXV0bzttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSAucGFuZWx7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2hlaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCl9W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpO2xlZnQ6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXNjcmVlbl0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpO3dpZHRoOjEwMCV9Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtc2NyZWVuXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0gW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG4gICAgYXNzZW1ibGVNZXRob2RTeW1ib2wsXG4gICAgQ3VzdG9tRWxlbWVudCxcbiAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQge2ZpcmVDdXN0b21FdmVudH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1NwbGl0U2NyZWVuU3R5bGVTaGVldH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zcGxpdC1zY3JlZW4ubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtpbnRlcm5hbFN5bWJvbH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTcGxpdFNjcmVlbiwgVFlQRV9WRVJUSUNBTCwgVFlQRV9IT1JJWk9OVEFMfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3BsaXRTY3JlZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkcmFnZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRyYWdnZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGFydFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGVuZFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImVuZFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGhhbmRsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJoYW5kbGVFbGVtZW50XCIpO1xuXG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX1ZFUlRJQ0FMID0gXCJ2ZXJ0aWNhbFwiO1xuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9IT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCI7XG5cblxuLyoqXG4gKiBUaGUgVmlld2VyIGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgYSBQREYsIEhUTUwgb3IgSW1hZ2UuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9zcGxpdHNjcmVlbi5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXNwbGl0c2NyZWVuIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNwbGl0LXNjcmVlbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNwbGl0LXNjcmVlbj48L21vbnN0ZXItc3BsaXQtc2NyZWVuPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9zcGxpdC1zY3JlZW4ubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3BsaXQtc2NyZWVuJyk7XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgc3BsaXRzY3JlZW4ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gU3BsaXRTY3JlZW5cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXRcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIHNwbGl0IHNjcmVlbiBsYXlvdXRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuY2xhc3MgU3BsaXRTY3JlZW4gZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzeW1ib2x9XG4gICAgICovXG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvc3BsaXRzY3JlZW5cIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cbiAgICAgKlxuICAgICAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc3BsaXRUeXBlIFNwbGl0IHR5cGUgKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbiBEaW1lbnNpb25cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLmluaXRpYWwgSW5pdGlhbCBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5tYXggTWF4aW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWluIE1pbmltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWFpbjogZ2V0VGVtcGxhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzcGxpdFR5cGU6IFRZUEVfVkVSVElDQUwsXG4gICAgICAgICAgICBkaW1lbnNpb246IHtcbiAgICAgICAgICAgICAgICBpbml0aWFsOiBcIjYwJVwiLFxuICAgICAgICAgICAgICAgIG1heDogXCI4MCVcIixcbiAgICAgICAgICAgICAgICBtaW46IFwiMjAlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgZnVsbFN0YXJ0U2NyZWVuKCkge1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbihcIjEwMCVcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBcbiAgICBmdWxsRW5kU2NyZWVuKCkge1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbihcIjAlXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgXG4gICAgcmVzZXRTY3JlZW4oKSB7XG4gICAgICAgIHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgXG4gICAgXG5cbiAgICBzZXRDb250ZW50KGh0bWwpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJjb250ZW50XCIsIGh0bWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG4gICAgICovXG4gICAgW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcbiAgICAgICAgc3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cbiAgICAgICAgaW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG4gICAgICAgIGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgLy9hcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZGltZW5zaW9uIGlzIGEgcGVyY2VudGFnZSBhbmQgd2l0aGluIGEgdmFsaWQgcmFuZ2UsIHRoZW4gc2V0IHRoZSBkaW1lbnNpb24gb3B0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpbWVuc2lvbiAtIFRoZSBkaW1lbnNpb24gdG8gYmUgc2V0LCBjYW4gYmUgaW4gcGVyY2VudGFnZSBvciBhYnNvbHV0ZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IC0gUmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHNldERpbWVuc2lvbihkaW1lbnNpb24pIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgcGVyY2VudCBhbmQgZ3JlYXRlciB0aGFuMTAwXG4gICAgICAgIGlmIChkaW1lbnNpb24uaW5jbHVkZXMoXCIlXCIpKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA+IDEwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMDAlXCIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludChkaW1lbnNpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID0gZGltZW5zaW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgIHJldHVybiBcIm1vbnN0ZXItc3BsaXQtc2NyZWVuXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICByZXR1cm4gW1NwbGl0U2NyZWVuU3R5bGVTaGVldF07XG4gICAgfVxufVxuXG5cbi8qKlxuICogU2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBwYW5lbCBiYXNlZCBvbiB0aGUgc3BsaXQgdHlwZS5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LmV2ZW50Om1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuZnVuY3Rpb24gYXBwbHlQYW5lbERpbWVuc2lvbnMoKSB7XG5cbiAgICBjb25zdCBzcGxpdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblxuICAgIGlmIChzcGxpdFR5cGUgPT09IFRZUEVfVkVSVElDQUwpIHtcbiAgICAgICAgdGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBkaW1lbnNpb247XG4gICAgICAgIHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcbiAgICAgICAgdGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJldy1yZXNpemVcIjtcbiAgICAgICAgdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJ2ZXJ0aWNhbFwiKTtcbiAgICAgICAgdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJob3Jpem9udGFsXCIpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gZGltZW5zaW9uO1xuICAgICAgICB0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuICAgICAgICB0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcIm5zLXJlc2l6ZVwiO1xuICAgICAgICB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhvcml6b250YWxcIik7XG4gICAgICAgIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwidmVydGljYWxcIik7XG5cbiAgICB9XG5cbiAgICBmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXCIsIHtcbiAgICAgICAgY29udHJvbGxlcjogdGhpcyxcbiAgICAgICAgZGltZW5zaW9uOiBkaW1lbnNpb25cbiAgICB9KTtcbiAgICBcbn1cblxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1zY3JlZW5dXCIpO1xuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl1cIik7XG4gICAgdGhpc1toYW5kbGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV1cIik7XG5cbiAgICB0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXJ0UGFuZWxdXCIpO1xuICAgIHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtbW9uc3Rlci1yb2xlPWVuZFBhbmVsXVwiKTtcblxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBsZXQgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuICAgIGxldCBsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXG4gICAgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xuICAgICAgICBzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICBsYXN0RGltZW5zaW9uID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBjdXJyZW50RGltZW5zaW9uO1xuICAgICAgICBpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG4gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUud2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKSB7XG4gICAgICAgICAgICBzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCkge1xuICAgICAgICAgICAgc2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHtcbiAgICAgICAgc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyB0aGUgNXB4IGFyZSB3cm9uZyBhbmQgbXVzdCBiZSBjYWxjIGZyb20gY3NzIHByb3BlcnR5IC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXG5cbiAgICAgICAgICAgIGxldCBkcmFnZ2VyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHNlbGZbZHJhZ2dlckVsZW1lbnRTeW1ib2xdKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcIik7XG4gICAgICAgICAgICBpZiAoZHJhZ2dlcldpZHRoID09PSBcIlwiIHx8IGRyYWdnZXJXaWR0aCA9PT0gdW5kZWZpbmVkIHx8IGRyYWdnZXJXaWR0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRyYWdnZXJXaWR0aCA9IFwiMFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfSE9SSVpPTlRBTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldFRvcCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3R0b21QYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VG9wSGVpZ2h0ID0gZS5jbGllbnRZIC0gY29udGFpbmVyT2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcbiAgICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wQXNQZXJjZW50ID0gKG5ld1RvcEhlaWdodCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQpICogMTAwO1xuICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQobWluKSA+IHRvcEFzUGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgbmV3VG9wSGVpZ2h0ID0gbWluO1xuICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCB0b3BBc1BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgIG5ld1RvcEhlaWdodCA9IG1heDtcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgIG5ld1RvcEhlaWdodCA9IHRvcEFzUGVyY2VudCArIFwiJVwiO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAvLyBjYWxjIG5ldyB0b3AgaGVpZ2h0IHRvIHBpeGVsICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvcEhlaWdodFB4ID0gKHBhcnNlSW50KG5ld1RvcEhlaWdodCkgLyAxMDApICogdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgICAgIHRvcFBhbmVsLnN0eWxlLmhlaWdodCA9IGAke25ld1RvcEhlaWdodFB4fXB4YDtcbiAgICAgICAgICAgICAgICBib3R0b21QYW5lbC5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtuZXdUb3BIZWlnaHRQeH1weCAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciBoZWlnaHRcblxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0TGVmdCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0UGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0xlZnRXaWR0aCA9IGUuY2xpZW50WCAtIGNvbnRhaW5lck9mZnNldExlZnQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdEFzUGVyY2VudCA9IChuZXdMZWZ0V2lkdGggLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0V2lkdGgpICogMTAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KG1pbikgPiBsZWZ0QXNQZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnRXaWR0aCA9IG1pbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCBsZWZ0QXNQZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnRXaWR0aCA9IG1heDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0V2lkdGggPSBsZWZ0QXNQZXJjZW50ICsgXCIlXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGVmdFBhbmVsLnN0eWxlLndpZHRoID0gYCR7bmV3TGVmdFdpZHRofWA7XG4gICAgICAgICAgICAgICAgcmlnaHRQYW5lbC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke25ld0xlZnRXaWR0aH0gLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgd2lkdGhcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJhZ0V2ZW50SGFuZGxlciA9IChlKSA9PiB7XG4gICAgICAgICAgICBzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGRyYWdFdmVudEhhbmRsZXIpO1xuXG4gICAgfSk7XG5cblxuICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuICAgICAgICBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICBsZXQgYXBwbHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGxhc3REaW1lbnNpb24gIT09IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuICAgICAgICAgICAgICAgIGFwcGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxhc3RUeXBlICE9PSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSkge1xuICAgICAgICAgICAgICAgIGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG4gICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pKTtcblxuXG4gICAgcmV0dXJuIHRoaXM7XG5cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcbiAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNwbGl0LXNjcmVlblwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhcnRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwic3RhcnRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGFydFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRyYWdnZXJcIiBwYXJ0PVwiZHJhZ2dlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJoYW5kbGVcIiBwYXJ0PVwiaGFuZGxlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJlbmRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwiZW5kUGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3BsaXRTY3JlZW4pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFJlbG9hZCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIHJlbG9hZHMgdGhlIGNvbnRlbnQgb2YgYSB1cmwgYW5kIGVtYmVkcyBpdCBpbnRvIHRoZSBkb20uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9yZWxvYWQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItcmVsb2FkIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICpcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtSZWxvYWR9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9yZWxvYWQuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQSBzaW1wbGUgY29uZmlndXJhdGlvbiBjYW4gbG9vayBsaWtlIHRoaXNcbiAqXG4gKiBgYGBodG1sXG4gKiA8c2NyaXB0IGlkPVwiY29uZmlnXCJcbiAqICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAqICAgICB7XG4gKiAgICAgICAgIFwidXJsXCI6IFwiLi9jb250ZW50Lmh0bWxcIixcbiAqICAgICB9XG4gKiA8L3NjcmlwdD5cbiAqXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZGlzcGxheSBhIGxvYWRlciwgeW91IGNhbiBpbnNlcnQgYSBkaXYgd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiYC5cbiAqIFRoZSBjb250ZW50IG9mIHRoaXMgZGl2IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGxvYWRlZCBjb2RlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqIExPQURFUiAuLi5cbiAqIDwvZGl2PlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIElmIHlvdSBuZWVkIGFkZGl0aW9uYWwgc3RydWN0dXJlLCB5b3UgY2FuIHNpbXBseSBzcGVjaWZ5IGl0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAqICAgPGRpdiBjbGFzcz1cImNvbFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gKiAgICAgICBMT0FERVIgLi4uXG4gKiAgIDwvZGl2PlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIHJlbG9hZC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBSZWxvYWRcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHJlbG9hZCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBSZWxvYWQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3JlbG9hZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCBjdXJyZW50bHkgdGhlIHZhbHVlcyBkZWZpbmVkIGFyZSBgb25zaG93YCBhbmQgYGFsd2F5c2AuIFRoZSBkZWZhdWx0IGBvbnNob3dgIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyPXVuZGVmaW5lZCBkb20gc2VsZWN0b3JzIHRvIHNlYXJjaCBmb3IgZWxlbWVudHMsIGlmIHVuZGVmaW5lZCB0aGVuIGV2ZXJ5dGhpbmcgaXMgdGFrZW5cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qcm9jZXNzb3JbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlLmNhbGwodGhpcyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoYWRvd01vZGU6IGZhbHNlLFxuXHRcdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVsb2FkOiBcIm9uc2hvd1wiLFxuXHRcdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1yZWxvYWRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIHVuZGVmaW5lZCBvciBhbHdheXMgZG8gdGhlIHNhbWVcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCgpIHtcblx0Y29uc3QgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0aWYgKCFpc1N0cmluZyh1cmwpIHx8IHVybCA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdXJsXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBwYXJlbnROb2RlID0gdGhpcztcblx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHBhcmVudE5vZGUgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cdH1cblxuXHRsZXQgY29udGFpbmVyID0gcGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWApO1xuXHRsZXQgY3VycmVudERpc3BsYXlNb2RlID0gY29udGFpbmVyPy5zdHlsZT8uZGlzcGxheTtcblxuXHRpZiAoY3VycmVudERpc3BsYXlNb2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRjdXJyZW50RGlzcGxheU1vZGUgPSBcImluaGVyaXRcIjtcblx0fVxuXG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHRwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdH1cblxuXHRyZXR1cm4gbG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMsIHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyXCIpKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGlmIChjdXJyZW50RGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnREaXNwbGF5TW9kZTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0cmV0dXJuIHRoaXMuaW5uZXJIVE1MO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUmVsb2FkKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jdXN0b21jb250cm9sLWNsYXNzLnBuZ1wiPlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgW3BvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbCkgY2FuIGJlIHVzZWQuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIG9iamVjdCB1c2luZyB0aGUgZnVuY3Rpb24gYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAuXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBQb2x5ZmlsbCBmb3IgYXR0YWNoSW50ZXJuYWxzKCkgY2FuIGJlIHVzZWQ6IHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbHxlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbH0uXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBXSUNHIFdlYiBDb21wb25lbnRzOiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50c3xXSUNHIFdlYiBDb21wb25lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50czoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50c3xDdXN0b20gRWxlbWVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9kZXYvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb25zfEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uc30uXG4gKlxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBjdXN0b20gY29udHJvbHMgYmFzZWQgb24gQ3VzdG9tRWxlbWVudC5cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGV4dGVuZHMgTW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudFxuICovXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IgbWV0aG9kIG9mIEN1c3RvbUNvbnRyb2wsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXHQgKiBJdCBjaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgIGFuZCBpbml0aWFsaXplcyBhbiBpbnRlcm5hbCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudFxuXHQgKiBpZiBzdXBwb3J0ZWQuIEFkZGl0aW9uYWxseSwgaXQgaW5pdGlhbGl6ZXMgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlcy5cblx0ICpcblx0ICogU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZGVmaW5lfEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5kZWZpbmUoKX1cblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZ2V0fEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5nZXQoKX1cblx0ICogYW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFsc3xFbGVtZW50SW50ZXJuYWxzfVxuXHQgKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvbGFiZWxzfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBsYWJlbHMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmxhYmVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7VmFsaWRpdHlTdGF0ZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgW1ZhbGlkaXR5U3RhdGVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WYWxpZGl0eVN0YXRlfVxuXHQgKiBAc2VlIFt2YWxpZGl0eV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3ZhbGlkaXR5fVxuXHQgKi9cblx0Z2V0IHZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGl0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc3RhdGVzXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHN0YXRlcygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uc3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxGb250RWxlbWVudHxudWxsfVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0c2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcikge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9jaGVja1ZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVcblx0ICovXG5cdGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZSwgbW9kZSkge31cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGZvcm1SZXNldENhbGxiYWNrKCkge1xuXHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbCgpIHtcblx0aWYgKCEoYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCBpbiB0aGlzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpc1thdHRhY2hlZEludGVybmFsU3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdC8vIHZhbHVlXG5cdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW1widmFsdWVcIl0gPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0fTtcbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtCdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTpob3N0KG1vbnN0ZXItYnV0dG9uKXtkaXNwbGF5OmZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4fSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtSaXBwbGVTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUmlwcGxlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFJpcHBsZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgcmlwcGxlIHsgXG5zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0NMQVNTIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgUmlwcGxlU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3JpcHBsZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2J1dHRvbi5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1idXR0b24+PC9tb25zdGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0J1dHRvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpO1xuICogYGBgXG4gKlxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanNcbiAqIEBzdGFydHVtbCBidXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBidXR0b25cbiAqL1xuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkJ1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0YXR0cmlidXRlcy5wdXNoKEFUVFJJQlVURV9CVVRUT05fQ0xBU1MpO1xuXHRcdHJldHVybiBhdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiB0aGUgU2VsZWN0XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogLy8gXHUyMUE2IDFcblx0ICogLy8gXHUyMUE2IFsnMScsJzInXVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEBzaW5jZSAxLjIuMFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB2YWx1ZSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbj08c2xvdD48L3Nsb3Q+IEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYWN0aW9ucyBDYWxsYmFja3Ncblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbnMuY2xpY2s9XCJ0aHJvdyBFcnJvclwiIENhbGxiYWNrIHdoZW4gY2xpY2tlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5idXR0b249XCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIgQ1NTIGNsYXNzIGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGVmZmVjdHMgRWZmZWN0c1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVmZmVjdHMucmlwcGxlPXRydWUgUmlwcGxlIGVmZmVjdFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiLFxuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6ICgpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGVmZmVjdHM6IHtcblx0XHRcdFx0cmlwcGxlOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUmlwcGxlU3R5bGVTaGVldCwgQnV0dG9uU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWJ1dHRvbi1jbGlja2VkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRjb25zdCBidXR0b24gPSB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdO1xuXG5cdGNvbnN0IHR5cGUgPSBcImNsaWNrXCI7XG5cblx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIik7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWJ1dHRvbi1jbGlja2VkXCIsIHtcblx0XHRcdGJ1dHRvbjogc2VsZixcblx0XHR9KTtcblxuXHRcdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlICYmIHNlbGYuaGFzTm9kZShlbGVtZW50KSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHNlbGYsIGV2ZW50KTtcblx0fSk7XG5cblx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZWZmZWN0cy5yaXBwbGVcIikpIHtcblx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNyZWF0ZVJpcHBsZS5iaW5kKHNlbGYpKTtcblx0fVxuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9CVVRUT05fQ0xBU1NdID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0c2VsZi5zZXRPcHRpb24oXCJjbGFzc2VzLmJ1dHRvblwiLCB2YWx1ZSk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSaXBwbGUoZXZlbnQpIHtcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0Y29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChidXR0b24uY2xpZW50V2lkdGgsIGJ1dHRvbi5jbGllbnRIZWlnaHQpO1xuXHRjb25zdCByYWRpdXMgPSBkaWFtZXRlciAvIDI7XG5cblx0Y2lyY2xlLnN0eWxlLndpZHRoID0gY2lyY2xlLnN0eWxlLmhlaWdodCA9IGAke2RpYW1ldGVyfXB4YDtcblx0Y2lyY2xlLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gYnV0dG9uLm9mZnNldExlZnQgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSAtIGJ1dHRvbi5vZmZzZXRUb3AgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuY2xhc3NMaXN0LmFkZChcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXG5cdGNvbnN0IHJpcHBsZXMgPSBidXR0b24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXHRmb3IgKGNvbnN0IHJpcHBsZSBvZiByaXBwbGVzKSB7XG5cdFx0cmlwcGxlLnJlbW92ZSgpO1xuXHR9XG5cblx0YnV0dG9uLmFwcGVuZENoaWxkKGNpcmNsZSk7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b24pO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1N0YXRlQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFN0YXRlQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFN0YXRlQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBzdGF0ZWJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMDstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTE6I2U1Yjg3NTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTI6I2Q5YTM2MjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTM6I2MwOGE0ZTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTQ6I2E3NzEzYjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTU6IzhmNWEyODstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTY6IzM2MDUwNX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3RyYW5zaXRpb246d2lkdGggMTBzIGVhc2UtaW4tb3V0fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1sYWJlbF17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV17YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6c3RyZXRjaDtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjp3aWR0aCAxMnMgZWFzZS1pbi1vdXR9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5pbWcsW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmd7bWFyZ2luLWxlZnQ6LjNlbX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5zdWNjZXNzZnVse2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3NmdWwpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmFjdGl2aXR5e2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWFjdGl2aXR5KX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5mYWlsZWR7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZmFpbGVkKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5hY3Rpdml0eXthbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTphY3Rpdml0eTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLDAsLjIsMSl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXS5zdGF0ZWxlc3N7ZGlzcGxheTpub25lfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBib3VuY3l7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguMSl9ODAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMS4xNSl9OTAle3RyYW5zZm9ybTpzY2FsZSguOSl9dG97dHJhbnNmb3JtOnNjYWxlKDEpfX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGUsIGdldFN0YXRlSW5zdGFuY2VGb3IgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbFN5bWJvbFwiKTtcblxuLyoqXG4gKiBUaGlzIFN0YXRlIGNsYXNzIHJlcHJlc2VudCBhIFN0YXRlIHdpdGggcHJlc2VudGF0aW9uXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzXG4gKi9cbmNsYXNzIFN0YXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioc3RhdGUsIHByZXNlbnRhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSA9IHZhbGlkYXRlU3RyaW5nKHN0YXRlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24gPSB2YWxpZGF0ZVN0cmluZyhwcmVzZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqL1xuXHRnZXQgcHJlc2VudGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24sXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBzaW5jZSAxLjUuMFxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlc1xuICovXG5mdW5jdGlvbiBnZXRTdGF0ZUluc3RhbmNlRm9yKHN0YXRlKSB7XG5cdHN3aXRjaCAoc3RhdGUpIHtcblx0XHRjYXNlIFwic3RhdGVsZXNzXCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFwic3RhdGVsZXNzXCIsIFwiXCIpO1xuXHRcdGNhc2UgXCJzdWNjZXNzZnVsXCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcInN1Y2Nlc3NmdWxcIixcblx0XHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cInN1Y2Nlc3NmdWxcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2elwiLz48cGF0aCBkPVwiTTEwLjk3IDQuOTdhLjIzNS4yMzUgMCAwIDAtLjAyLjAyMkw3LjQ3NyA5LjQxNyA1LjM4NCA3LjMyM2EuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1elwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRjYXNlIFwiYWN0aXZpdHlcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwiYWN0aXZpdHlcIixcblx0XHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cImFjdGl2aXR5XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjhcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0Y2FzZSBcImZhaWxlZFwiOiAvLyBodHRwczovL2ljb25zLmdldGJvb3RzdHJhcC5jb20vaWNvbnMvZXhjbGFtYXRpb24tY2lyY2xlL1xuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJmYWlsZWRcIixcblx0XHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cImZhaWxlZFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNHptMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTZ6XCIvPjxwYXRoIGQ9XCJNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwek03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMEw3LjEgNC45OTV6XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKHN0YXRlLCBcIlwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgU3RhdGVCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBnZXRTdGF0ZUluc3RhbmNlRm9yLCBTdGF0ZSB9IGZyb20gXCIuL3R5cGVzL3N0YXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZUJ1dHRvbiB9O1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3N0YXRlLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXN0YXRlLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zdGF0ZS1idXR0b24+PC9tb25zdGVyLXN0YXRlLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1N0YXRlQnV0dG9ufSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2Uvc3RhdGUtYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1idXR0b24tY2xhc3NgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBzdGF0ZS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBTdGF0ZUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBzdGF0ZSBidXR0b24gd2l0aCBpY29uc1xuICovXG5jbGFzcyBTdGF0ZUJ1dHRvbiBleHRlbmRzIEJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzdGF0ZXMgQXZhaWxhYmxlIHN0YXR1c1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuc3VjY2Vzc2Z1bD0gc3VjY2Vzc2Z1bFxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuYWN0aXZpdHk9IGFjdGl2aXR5XG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5mYWlsZWQ9IGZhaWxlZFxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBjdXJyZW50IGN1cnJlbnQgc3RhdHVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrfSBhY3Rpb25zLmNsaWNrXG5cdCAqIEBleHRlbmRzIHtCdXR0b259XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2ljb25zL2Jsb2IvbWFpbi9MSUNFTlNFLm1kfEJvb3RzdHJhcCBpY29ucyBsaWNlbnNlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0c3RhdGVzOiB7XG5cdFx0XHRcdHN1Y2Nlc3NmdWw6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdWNjZXNzZnVsXCIpLFxuXHRcdFx0XHRhY3Rpdml0eTogZ2V0U3RhdGVJbnN0YW5jZUZvcihcImFjdGl2aXR5XCIpLFxuXHRcdFx0XHRmYWlsZWQ6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJmYWlsZWRcIiksXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN0YXRlbGVzc1wiKSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidXR0b24uXG5cdCAqIElmIGEgdGltZW91dCBpcyBzZXQsIHRoZSBzdGF0ZSBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYWZ0ZXIgdGhlXG5cdCAqIHNwZWNpZmllZCB0aW1lLlxuXHQgKlxuXHQgKiBAc2luY2UgMy4xOC4wIGEgcHJldmlvdXNseSBzZXQgdGltZW91dCBpcyBjbGVhcmVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0Y29uc3QgdGltZW91dFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJ0aW1lb3V0XCIpO1xuXHRcdGlmICh0aGlzW3RpbWVvdXRTeW1ib2xdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVvdXRTeW1ib2xdKTtcblx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVvdXRTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMuZ2V0T3B0aW9uKGBzdGF0ZXMuJHt2YWxpZGF0ZVN0cmluZyhzdGF0ZSl9YCk7XG5cdFx0aWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3QgZm91bmRcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjdXJyZW50XCIsIHZhbGlkYXRlSW5zdGFuY2Uob2JqLCBTdGF0ZSkpO1xuXG5cdFx0aWYgKGlzSW50ZWdlcih0aW1lb3V0KSAmJiB0aW1lb3V0ID4gMCkge1xuXHRcdFx0dGhpc1t0aW1lb3V0U3ltYm9sXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVN0YXRlKCk7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVvdXRTeW1ib2xdO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU3RhdGVCdXR0b259XG5cdCAqL1xuXHRyZW1vdmVTdGF0ZSgpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcImN1cnJlbnRcIiwgZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN0YXRlbGVzc1wiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiY3VycmVudFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJsYWJlbFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGF0ZVwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmN1cnJlbnQuc3RhdGVcIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjdXJyZW50LnByZXNlbnRhdGlvblwiPjwvZGl2PlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFN0YXRlQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IERFTElNSVRFUiwgUGF0aGZpbmRlciwgV0lMRENBUkQgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZE1hcCwgUEFSRU5ULCBhc3NlbWJsZVBhcnRzIH07XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqL1xuY29uc3QgUEFSRU5UID0gXCJeXCI7XG5cbi8qKlxuICogTWFwcyBjYW4gYmUgZWFzaWx5IGNyZWF0ZWQgZnJvbSBkYXRhIG9iamVjdHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgZnVuY3Rpb24gYGJ1aWxkTWFwKClgLlxuICpcbiAqIFRoZSBwYXRoIGNhbiBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIGEgc2ltcGxlIGRlZmluaXRpb24gYS5iLmMgb3IgYSB0ZW1wbGF0ZSAke2EuYi5jfS5cbiAqIEtleSBhbmQgdmFsdWUgY2FuIGJlIGVpdGhlciBhIGRlZmluaXRpb24gb3IgYSB0ZW1wbGF0ZS4gVGhlIGtleSBkb2VzIG5vdCBoYXZlIHRvIGJlIGRlZmluZWQuXG4gKiBUaGUgdGVtcGxhdGVzIGRldGVybWluZSB0aGUgYXBwZWFyYW5jZSBvZiB0aGUga2V5cyBhbmQgdGhlIHZhbHVlIG9mIHRoZSBtYXAuIEVpdGhlciBhIHNpbmdsZSB2YWx1ZVxuICogaWQgY2FuIGJlIHRha2VuIG9yIGEgY29tcG9zaXRlIGtleSAke2lkfSAke25hbWV9IGNhbiBiZSB1c2VkLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGFjY2VzcyB2YWx1ZXMgb2YgdGhlIHBhcmVudCBkYXRhIHNldCwgeW91IGhhdmUgdG8gdXNlIHRoZSBeIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgJHtpZH0gJHteLm5hbWV9LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2J1aWxkbWFwLm1qc1xuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIGRhdGEgb2JqZWN0IGZyb20gd2hpY2ggdGhlIG1hcCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBUaGUgcGF0aCB0byB0aGUgZGF0YSBvYmplY3QsIG9yIGEgY2FsbGJhY2sgdGhhdCByZXR1cm5zIGEgbWFwLlxuICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgbWFwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXlUZW1wbGF0ZV0gLSBBIHRlbXBsYXRlIGZvciB0aGUga2V5IG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IFtmaWx0ZXJdIC0gQSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaWx0ZXIgb3V0IHZhbHVlcy5cbiAqIEByZXR1cm4geyp9IC0gVGhlIGNyZWF0ZWQgbWFwLlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHRocm93cyB7VHlwZUVycm9yfSAtIElmIHRoZSB2YWx1ZSBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSAtIElmIHRoZSBzZWxlY3RvciBjYWxsYmFjayBkb2VzIG5vdCByZXR1cm4gYSBtYXAuXG4gKiovXG5mdW5jdGlvbiBidWlsZE1hcChzdWJqZWN0LCBzZWxlY3RvciwgdmFsdWVUZW1wbGF0ZSwga2V5VGVtcGxhdGUsIGZpbHRlcikge1xuXHRyZXR1cm4gYXNzZW1ibGVQYXJ0cyhzdWJqZWN0LCBzZWxlY3RvciwgZmlsdGVyLCBmdW5jdGlvbiAodiwgaywgbSkge1xuXHRcdGsgPSBidWlsZCh2LCBrZXlUZW1wbGF0ZSwgayk7XG5cdFx0diA9IGJ1aWxkKHYsIHZhbHVlVGVtcGxhdGUpO1xuXHRcdHRoaXMuc2V0KGssIHYpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGUgYXNzZW1ibGVQYXJ0cyBmdW5jdGlvbiBpcyBhIHByaXZhdGUgZnVuY3Rpb24gdGhhdCBoZWxwcyBpbiBidWlsZGluZyBhIG1hcCBmcm9tIGEgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gYSBwcm92aWRlZFxuICogc2VsZWN0b3IuIFRoZSBzZWxlY3RvciBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhXG4gKiBoZWxwZXIgZnVuY3Rpb24gYnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgcGFyYW1ldGVyczpcbiAqXG4gKiBzdWJqZWN0OiBUaGUgc3ViamVjdCBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIGlzIHRvIGJlIGJ1aWx0XG4gKiBzZWxlY3RvcjogVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogZmlsdGVyIChvcHRpb25hbCk6IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBjYWxsYmFjazogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLlxuICogSWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBpdCBpcyBleGVjdXRlZCBwYXNzaW5nIHRoZSBzdWJqZWN0IGFzIGl0cyBhcmd1bWVudCxcbiAqIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgTWFwLiBPdGhlcndpc2UsIGlmIHRoZSBzZWxlY3RvciBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsXG4gKiBidWlsZEZsYXRNYXAgaXMgY2FsbGVkIHRvIGJ1aWxkIGEgZmxhdCBtYXAgd2l0aCBrZXlzIGFuZCB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gdGhlIHN1YmplY3Qgb2JqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3Rvci5cbiAqXG4gKiBJZiB0aGUgZmlsdGVyIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIGZpbHRlciBvdXQgY2VydGFpbiBlbGVtZW50cyBmcm9tIHRoZSBtYXAsIGJhc2VkIG9uIHNvbWVcbiAqIGNyaXRlcmlhLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdGhlIHZhbHVlLCBrZXksIGFuZCBtYXAgb2JqZWN0LCBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSwgdGhlIGVsZW1lbnQgd2lsbCBiZSBza2lwcGVkLlxuICpcbiAqIEZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKiB2OiBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnRcbiAqIGs6IFRoZSBrZXkgb2YgdGhlIGVsZW1lbnRcbiAqIG06IFRoZSBtYXAgb2JqZWN0XG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy4gSWYgbWFwIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBNYXAsIGFuIGVtcHR5IG1hcCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEV4YW1wbGUgVXNhZ2U6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3Qgb2JqID0ge1xuICogICBuYW1lOiBcIkpvaG5cIixcbiAqICAgYWdlOiAzMCxcbiAqICAgYWRkcmVzczoge1xuICogICAgIGNpdHk6IFwiTmV3IFlvcmtcIixcbiAqICAgICBzdGF0ZTogXCJOWVwiLFxuICogICAgIGNvdW50cnk6IFwiVVNBXCIsXG4gKiAgIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IHNlbGVjdG9yID0gXCJhZGRyZXNzXCI7XG4gKlxuICogY29uc3QgbWFwID0gYXNzZW1ibGVQYXJ0cyhvYmosIHNlbGVjdG9yLCBudWxsLCBmdW5jdGlvbiAodiwgaywgbSkge1xuICogICB0aGlzLnNldChrLCB2KTtcbiAqIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1hcCk7XG4gKiAvLyBPdXRwdXQ6IE1hcCgzKSB7XG4gKiAvLyAgIFwiYWRkcmVzcy5jaXR5XCIgPT4gXCJOZXcgWW9ya1wiLFxuICogLy8gICBcImFkZHJlc3Muc3RhdGVcIiA9PiBcIk5ZXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5jb3VudHJ5XCIgPT4gXCJVU0FcIlxuICogLy8gfVxuICogYGBgXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgc3ViamVjdCBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIGlzIHRvIGJlIGJ1aWx0LlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciB0byBkZXRlcm1pbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFwLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHZhbHVlcyBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBAcmV0dXJuIHtNYXB9IC0gQSBuZXcgbWFwIHdpdGggdGhlIHByb2Nlc3NlZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gV2hlbiBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5mdW5jdGlvbiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGNhbGxiYWNrKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRsZXQgbWFwO1xuXHRpZiAoaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcblx0XHRtYXAgPSBzZWxlY3RvcihzdWJqZWN0KTtcblx0XHRpZiAoIShtYXAgaW5zdGFuY2VvZiBNYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHNlbGVjdG9yIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgbWFwXCIpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcblx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0YnVpbGRGbGF0TWFwLmNhbGwobWFwLCBzdWJqZWN0LCBzZWxlY3Rvcik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb25cIik7XG5cdH1cblxuXHRpZiAoIShtYXAgaW5zdGFuY2VvZiBNYXApKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hcC5mb3JFYWNoKCh2LCBrLCBtKSA9PiB7XG5cdFx0aWYgKGlzRnVuY3Rpb24oZmlsdGVyKSkge1xuXHRcdFx0aWYgKGZpbHRlci5jYWxsKG0sIHYsIGspICE9PSB0cnVlKSByZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChyZXN1bHQsIHYsIGssIG0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gc3ViamVjdFxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gcGFyZW50TWFwXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBidWlsZEZsYXRNYXAoc3ViamVjdCwgc2VsZWN0b3IsIGtleSwgcGFyZW50TWFwKSB7XG5cdGNvbnN0IGN1cnJlbnRNYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcmVzdWx0TGVuZ3RoID0gdGhpcy5zaXplO1xuXG5cdGlmIChrZXkgPT09IHVuZGVmaW5lZCkga2V5ID0gW107XG5cblx0Y29uc3QgcGFydHMgPSBzZWxlY3Rvci5zcGxpdChERUxJTUlURVIpO1xuXHRsZXQgY3VycmVudCA9IFwiXCI7XG5cdGNvbnN0IGN1cnJlbnRQYXRoID0gW107XG5cdGRvIHtcblx0XHRjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblx0XHRjdXJyZW50UGF0aC5wdXNoKGN1cnJlbnQpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFdJTERDQVJEKSB7XG5cdFx0XHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihzdWJqZWN0KTtcblx0XHRcdGxldCBtYXA7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1hcCA9IGZpbmRlci5nZXRWaWEoY3VycmVudFBhdGguam9pbihERUxJTUlURVIpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y29uc3QgYSA9IGU7XG5cdFx0XHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBbaywgb10gb2YgbWFwKSB7XG5cdFx0XHRcdGNvbnN0IGNvcHlLZXkgPSBjbG9uZShrZXkpO1xuXG5cdFx0XHRcdGN1cnJlbnRQYXRoLm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRcdGNvcHlLZXkucHVzaChhID09PSBXSUxEQ0FSRCA/IGsgOiBhKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3Qga2sgPSBjb3B5S2V5LmpvaW4oREVMSU1JVEVSKTtcblx0XHRcdFx0Y29uc3Qgc3ViID0gYnVpbGRGbGF0TWFwLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRvLFxuXHRcdFx0XHRcdHBhcnRzLmpvaW4oREVMSU1JVEVSKSxcblx0XHRcdFx0XHRjb3B5S2V5LFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGlzT2JqZWN0KHN1YikgJiYgcGFyZW50TWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzdWJbUEFSRU5UXSA9IHBhcmVudE1hcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRNYXAuc2V0KGtrLCBzdWIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSB3aGlsZSAocGFydHMubGVuZ3RoID4gMCk7XG5cblx0Ly8gbm8gc2V0IGluIGNoaWxkIHJ1blxuXHRpZiAocmVzdWx0TGVuZ3RoID09PSB0aGlzLnNpemUpIHtcblx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBjdXJyZW50TWFwKSB7XG5cdFx0XHR0aGlzLnNldChrLCBvKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3ViamVjdDtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICBLZXlcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRGF0YS5idWlsZE1hcH1cbiAqL1xuXG4vKipcbiAqIEFsdGVybmF0aXZlbHkgdG8gYSBzdHJpbmcgc2VsZWN0b3IgYSBjYWxsYmFjayBjYW4gYmUgc3BlY2lmaWVkLiB0aGlzIG11c3QgcmV0dXJuIGEgbWFwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2J1aWxkTWFwfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyc7XG4gKlxuICogbGV0IG9iaiA9IHtcbiAqICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgfTtcbiAqXG4gKiBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3ViamVjdCkge1xuICogICAgICAgICAgICAgICAgbGV0IG0gPSBuZXcgTWFwO1xuICpcbiAqICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGJdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QuZGF0YSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTEgPSBpO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqLCBjXSBvZiBPYmplY3QuZW50cmllcyhiLmVucmljaG1lbnQudmFyaWFudHMpKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkyID0gajtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIGRdIG9mIE9iamVjdC5lbnRyaWVzKGMucHJpY2UpKSB7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTMgPSBrO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSA9IGIubmFtZTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubGFiZWwgPSBjLmxhYmVsO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCA9IFtrZXkxLCBrZXkyLCBrZXkzXS5qb2luKCcuJyk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXQoZC5pZCwgZCk7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gKiAgICAgICAgICAgIH1cbiAqXG4gKiBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCBjYWxsYmFjaywgJyR7bmFtZX0gJHt2a30nLCAnJHtpZH0nKVxuICpcbiAqIC8vIFx1MjFBNiBNYXAoMykge1xuICogLy8gIFwiMC4wLjBcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMC4xXCI6XCJDYXNzYW5kcmEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMFwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4xLjFcIjpcIkNhc3NhbmRyYSAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4wXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjIuMVwiOlwiQ2Fzc2FuZHJhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjBcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMy4xXCI6XCJDYXNzYW5kcmEgNDIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjAuMFwiOlwiWWVzc2V5ISAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4xXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4xLjBcIjpcIlllc3NleSEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMVwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMi4wXCI6XCJZZXNzZXkhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjFcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjMuMFwiOlwiWWVzc2V5ISA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4xXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiXG4gKiAvLyB9XG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja1xuICogQHBhcmFtIHsqfSBzdWJqZWN0IHN1YmplY3RcbiAqIEByZXR1cm4gTWFwXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE3LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRGF0YS5idWlsZE1hcH1cbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZGVmaW5pdGlvblxuICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkKHN1YmplY3QsIGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSkge1xuXHRpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlIDogc3ViamVjdDtcblx0dmFsaWRhdGVTdHJpbmcoZGVmaW5pdGlvbik7XG5cblx0Y29uc3QgcmVnZXhwID0gLyg/PHBsYWNlaG9sZGVyPlxcJHsoPzxwYXRoPlthLXpcXF5BLVouXFwtXzAtOV0qKX0pL2dtO1xuXHRjb25zdCBhcnJheSA9IFsuLi5kZWZpbml0aW9uLm1hdGNoQWxsKHJlZ2V4cCldO1xuXG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXG5cdGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gZmluZGVyLmdldFZpYShkZWZpbml0aW9uKTtcblx0fVxuXG5cdGFycmF5LmZvckVhY2goKGEpID0+IHtcblx0XHRjb25zdCBncm91cHMgPSBhPy5bXCJncm91cHNcIl07XG5cdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBncm91cHM/LltcInBsYWNlaG9sZGVyXCJdO1xuXHRcdGlmIChwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXRoID0gZ3JvdXBzPy5bXCJwYXRoXCJdO1xuXG5cdFx0bGV0IHYgPSBmaW5kZXIuZ2V0VmlhKHBhdGgpO1xuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHYgPSBkZWZhdWx0VmFsdWU7XG5cblx0XHRkZWZpbml0aW9uID0gZGVmaW5pdGlvbi5yZXBsYWNlQWxsKHBsYWNlaG9sZGVyLCB2KTtcblx0fSk7XG5cblx0cmV0dXJuIGRlZmluaXRpb247XG59XG4iLCAiLyoqXG4gKiBDdXN0b20gcG9zaXRpb25pbmcgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdmlydHVhbC1lbGVtZW50c1xuICovXG5cbmNvbnN0IHNpZGVzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IGFsaWdubWVudHMgPSBbJ3N0YXJ0JywgJ2VuZCddO1xuY29uc3QgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzBdLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzFdKSwgW10pO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IGNyZWF0ZUNvb3JkcyA9IHYgPT4gKHtcbiAgeDogdixcbiAgeTogdlxufSk7XG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBjbGFtcChzdGFydCwgdmFsdWUsIGVuZCkge1xuICByZXR1cm4gbWF4KHN0YXJ0LCBtaW4odmFsdWUsIGVuZCkpO1xufVxuZnVuY3Rpb24gZXZhbHVhdGUodmFsdWUsIHBhcmFtKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZShwYXJhbSkgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEF4aXNMZW5ndGgoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBjb25zdCBsciA9IFsnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCBybCA9IFsncmlnaHQnLCAnbGVmdCddO1xuICBjb25zdCB0YiA9IFsndG9wJywgJ2JvdHRvbSddO1xuICBjb25zdCBidCA9IFsnYm90dG9tJywgJ3RvcCddO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsIDogbHI7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyIDogcmw7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YiA6IGJ0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVjdCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCAiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIC4uLnJlY3RzLmZsb2F0aW5nLFxuICAgIHgsXG4gICAgeVxuICB9IDogcmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBvZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgb2Zmc2V0U2NhbGUgPSAoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KG9mZnNldFBhcmVudCkpKSA/IChhd2FpdCAocGxhdGZvcm0uZ2V0U2NhbGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldFNjYWxlKG9mZnNldFBhcmVudCkpKSB8fCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH0gOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCA/IGF3YWl0IHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9KSA6IHJlY3QpO1xuICByZXR1cm4ge1xuICAgIHRvcDogKGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGJvdHRvbTogKGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGxlZnQ6IChjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQpIC8gb2Zmc2V0U2NhbGUueCxcbiAgICByaWdodDogKGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCkgLyBvZmZzZXRTY2FsZS54XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gb3B0aW9ucyA9PiAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBvcHRpb25zLFxuICBhc3luYyBmbihzdGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbWlkZGxld2FyZURhdGFcbiAgICB9ID0gc3RhdGU7XG4gICAgLy8gU2luY2UgYGVsZW1lbnRgIGlzIHJlcXVpcmVkLCB3ZSBkb24ndCBQYXJ0aWFsPD4gdGhlIHR5cGUuXG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhZGRpbmcgPSAwXG4gICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKSB8fCB7fTtcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfTtcbiAgICBjb25zdCBheGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYXhpcyk7XG4gICAgY29uc3QgYXJyb3dEaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50KTtcbiAgICBjb25zdCBpc1lBeGlzID0gYXhpcyA9PT0gJ3knO1xuICAgIGNvbnN0IG1pblByb3AgPSBpc1lBeGlzID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbWF4UHJvcCA9IGlzWUF4aXMgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgY29uc3QgY2xpZW50UHJvcCA9IGlzWUF4aXMgPyAnY2xpZW50SGVpZ2h0JyA6ICdjbGllbnRXaWR0aCc7XG4gICAgY29uc3QgZW5kRGlmZiA9IHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdICsgcmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gY29vcmRzW2F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICBjb25zdCBzdGFydERpZmYgPSBjb29yZHNbYXhpc10gLSByZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gICAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkpO1xuICAgIGxldCBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBhcnJvd09mZnNldFBhcmVudFtjbGllbnRQcm9wXSA6IDA7XG5cbiAgICAvLyBET00gcGxhdGZvcm0gY2FuIHJldHVybiBgd2luZG93YCBhcyB0aGUgYG9mZnNldFBhcmVudGAuXG4gICAgaWYgKCFjbGllbnRTaXplIHx8ICEoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGFycm93T2Zmc2V0UGFyZW50KSkpKSB7XG4gICAgICBjbGllbnRTaXplID0gZWxlbWVudHMuZmxvYXRpbmdbY2xpZW50UHJvcF0gfHwgcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICB9XG4gICAgY29uc3QgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7XG5cbiAgICAvLyBJZiB0aGUgcGFkZGluZyBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBjYXVzZXMgdGhlIGFycm93IHRvIG5vIGxvbmdlciBiZVxuICAgIC8vIGNlbnRlcmVkLCBtb2RpZnkgdGhlIHBhZGRpbmcgc28gdGhhdCBpdCBpcyBjZW50ZXJlZC5cbiAgICBjb25zdCBsYXJnZXN0UG9zc2libGVQYWRkaW5nID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgLSAxO1xuICAgIGNvbnN0IG1pblBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttaW5Qcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21heFByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgZmxvYXRpbmcgZWxlbWVudCBpZiB0aGUgY2VudGVyXG4gICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCdzIGJvdW5kcy5cbiAgICBjb25zdCBtaW4kMSA9IG1pblBhZGRpbmc7XG4gICAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC0gbWF4UGFkZGluZztcbiAgICBjb25zdCBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICAgIGNvbnN0IG9mZnNldCA9IGNsYW1wKG1pbiQxLCBjZW50ZXIsIG1heCk7XG5cbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBhcnJvdydzIHBhZGRpbmcgY2F1c2VzIGl0IHRvXG4gICAgLy8gdG8gcG9pbnQgdG8gbm90aGluZyBmb3IgYW4gYWxpZ25lZCBwbGFjZW1lbnQsIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHRoZVxuICAgIC8vIGZsb2F0aW5nIGVsZW1lbnQgaXRzZWxmLiBUbyBlbnN1cmUgYHNoaWZ0KClgIGNvbnRpbnVlcyB0byB0YWtlIGFjdGlvbixcbiAgICAvLyBhIHNpbmdsZSByZXNldCBpcyBwZXJmb3JtZWQgd2hlbiB0aGlzIGlzIHRydWUuXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gIW1pZGRsZXdhcmVEYXRhLmFycm93ICYmIGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9IG51bGwgJiYgY2VudGVyICE9PSBvZmZzZXQgJiYgcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gKGNlbnRlciA8IG1pbiQxID8gbWluUGFkZGluZyA6IG1heFBhZGRpbmcpIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIDwgMDtcbiAgICBjb25zdCBhbGlnbm1lbnRPZmZzZXQgPSBzaG91bGRBZGRPZmZzZXQgPyBjZW50ZXIgPCBtaW4kMSA/IGNlbnRlciAtIG1pbiQxIDogY2VudGVyIC0gbWF4IDogMDtcbiAgICByZXR1cm4ge1xuICAgICAgW2F4aXNdOiBjb29yZHNbYXhpc10gKyBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtheGlzXTogb2Zmc2V0LFxuICAgICAgICBjZW50ZXJPZmZzZXQ6IGNlbnRlciAtIG9mZnNldCAtIGFsaWdubWVudE9mZnNldCxcbiAgICAgICAgLi4uKHNob3VsZEFkZE9mZnNldCAmJiB7XG4gICAgICAgICAgYWxpZ25tZW50T2Zmc2V0XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmVzZXQ6IHNob3VsZEFkZE9mZnNldFxuICAgIH07XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIHtcbiAgY29uc3QgYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudCA9IGFsaWdubWVudCA/IFsuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQpLCAuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9PSBhbGlnbm1lbnQpXSA6IGFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0U2lkZShwbGFjZW1lbnQpID09PSBwbGFjZW1lbnQpO1xuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcbiAgICBpZiAoYWxpZ25tZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCB8fCAoYXV0b0FsaWdubWVudCA/IGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkgIT09IHBsYWNlbWVudCA6IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMsXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzJDEgPSBhbGlnbm1lbnQgIT09IHVuZGVmaW5lZCB8fCBhbGxvd2VkUGxhY2VtZW50cyA9PT0gcGxhY2VtZW50cyA/IGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50IHx8IG51bGwsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSA6IGFsbG93ZWRQbGFjZW1lbnRzO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICgoX21pZGRsZXdhcmVEYXRhJGF1dG9QID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUC5pbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50UGxhY2VtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYWxpZ25tZW50U2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhjdXJyZW50UGxhY2VtZW50LCByZWN0cywgYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKTtcblxuICAgICAgLy8gTWFrZSBgY29tcHV0ZUNvb3Jkc2Agc3RhcnQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICBpZiAocGxhY2VtZW50ICE9PSBjdXJyZW50UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50cyQxWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE92ZXJmbG93cyA9IFtvdmVyZmxvd1tnZXRTaWRlKGN1cnJlbnRQbGFjZW1lbnQpXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMF1dLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1sxXV1dO1xuICAgICAgY29uc3QgYWxsT3ZlcmZsb3dzID0gWy4uLigoKF9taWRkbGV3YXJlRGF0YSRhdXRvUDIgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QMi5vdmVyZmxvd3MpIHx8IFtdKSwge1xuICAgICAgICBwbGFjZW1lbnQ6IGN1cnJlbnRQbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93czogY3VycmVudE92ZXJmbG93c1xuICAgICAgfV07XG4gICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxuICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KGQucGxhY2VtZW50KTtcbiAgICAgICAgcmV0dXJuIFtkLnBsYWNlbWVudCwgYWxpZ25tZW50ICYmIGNyb3NzQXhpcyA/XG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgZC5vdmVyZmxvd3Muc2xpY2UoMCwgMikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApIDpcbiAgICAgICAgLy8gQ2hlY2sgb25seSB0aGUgbWFpbkF4aXMuXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XG4gICAgICB9KS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGUgPSBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UuZmlsdGVyKGQgPT4gZFsyXS5zbGljZSgwLFxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXG4gICAgICAvLyBzaWRlLlxuICAgICAgZ2V0QWxpZ25tZW50KGRbMF0pID8gMiA6IDMpLmV2ZXJ5KHYgPT4gdiA8PSAwKSk7XG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XG4gICAgICBpZiAocmVzZXRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmbGlwJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGFycm93LCBfbWlkZGxld2FyZURhdGEkZmxpcDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIGluaXRpYWxQbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlLFxuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgICAgZmFsbGJhY2tTdHJhdGVneSA9ICdiZXN0Rml0JyxcbiAgICAgICAgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9ICdub25lJyxcbiAgICAgICAgZmxpcEFsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAgICAgLy8gSWYgYSByZXNldCBieSB0aGUgYXJyb3cgd2FzIGNhdXNlZCBkdWUgdG8gYW4gYWxpZ25tZW50IG9mZnNldCBiZWluZ1xuICAgICAgLy8gYWRkZWQsIHdlIHNob3VsZCBza2lwIGFueSBsb2dpYyBub3cgc2luY2UgYGZsaXAoKWAgaGFzIGFscmVhZHkgZG9uZSBpdHNcbiAgICAgIC8vIHdvcmsuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzI1NDkjaXNzdWVjb21tZW50LTE3MTk2MDE2NDNcbiAgICAgIGlmICgoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBpZiAoIXNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyAmJiBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uICE9PSAnbm9uZScpIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICBvdmVyZmxvd3M6IG92ZXJmbG93c0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkbWFwJHNvO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRtYXAkc28gPSBvdmVyZmxvd3NEYXRhLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRtYXAkc29bMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIEZvciB0eXBlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCB0aGUgYE9mZnNldE9wdGlvbnNgIHR5cGUgd2FzIGFsc29cbi8vIERlcml2YWJsZS5cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBwbGF0Zm9ybSxcbiAgICBlbGVtZW50c1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gIGNvbnN0IG1haW5BeGlzTXVsdGkgPSBbJ2xlZnQnLCAndG9wJ10uaW5jbHVkZXMoc2lkZSkgPyAtMSA6IDE7XG4gIGNvbnN0IGNyb3NzQXhpc011bHRpID0gcnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDE7XG4gIGNvbnN0IHJhd1ZhbHVlID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsLFxuICAgIC4uLnJhd1ZhbHVlXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBbJ3RvcCcsICdsZWZ0J10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXBwbHkgPSAoKSA9PiB7fSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzWUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSByZWN0cy5mbG9hdGluZztcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xuICAgICAgbGV0IHdpZHRoU2lkZTtcbiAgICAgIGlmIChzaWRlID09PSAndG9wJyB8fCBzaWRlID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcbiAgICAgICAgd2lkdGhTaWRlID0gYWxpZ25tZW50ID09PSAoKGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSkgPyAnc3RhcnQnIDogJ2VuZCcpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XG4gICAgICAgIGhlaWdodFNpZGUgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV07XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gd2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGFsaWdubWVudCB8fCBub1NoaWZ0ID8gbWluKG92ZXJmbG93QXZhaWxhYmxlV2lkdGgsIG1heGltdW1DbGlwcGluZ1dpZHRoKSA6IG1heGltdW1DbGlwcGluZ1dpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBhbGlnbm1lbnQgfHwgbm9TaGlmdCA/IG1pbihvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCwgbWF4aW11bUNsaXBwaW5nSGVpZ2h0KSA6IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsICJmdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICAvLyBCcm93c2VycyB3aXRob3V0IGBTaGFkb3dSb290YCBzdXBwb3J0LlxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgaWYgKHR5cGVvZiBDU1MgPT09ICd1bmRlZmluZWQnIHx8ICFDU1Muc3VwcG9ydHMpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIENTUy5zdXBwb3J0cygnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXInLCAnbm9uZScpO1xufVxuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQucGFnZVhPZmZzZXQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnBhZ2VZT2Zmc2V0XG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIHdpbi5mcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMod2luLmZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNXZWJLaXQgfTtcbiIsICJpbXBvcnQgeyByZWN0VG9DbGllbnRSZWN0LCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgZmxpcCBhcyBmbGlwJDEsIHNpemUgYXMgc2l6ZSQxLCBoaWRlIGFzIGhpZGUkMSwgYXJyb3cgYXMgYXJyb3ckMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3csIG9mZnNldCB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldERvY3VtZW50RWxlbWVudCwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihmbG9hdGluZykge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbG9hdGluZy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldE5vZGVTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBSZXR1cm5zIHRoZSBpbm5lciBjbGllbnQgcmVjdCwgc3VidHJhY3Rpbmcgc2Nyb2xsYmFycyBpZiBwcmVzZW50LlxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIGNvbnN0IHRvcCA9IGNsaWVudFJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIGNvbnN0IGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIGNvbnN0IHNjYWxlID0gaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldFNjYWxlKGVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY2FsZS54O1xuICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodCAqIHNjYWxlLnk7XG4gIGNvbnN0IHggPSBsZWZ0ICogc2NhbGUueDtcbiAgY29uc3QgeSA9IHRvcCAqIHNjYWxlLnk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSB7XG4gIGxldCByZWN0O1xuICBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIHJlY3QgPSBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpO1xuICB9IGVsc2UgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICdkb2N1bWVudCcpIHtcbiAgICByZWN0ID0gZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50KGNsaXBwaW5nQW5jZXN0b3IpKSB7XG4gICAgcmVjdCA9IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2aXN1YWxPZmZzZXRzID0gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KTtcbiAgICByZWN0ID0ge1xuICAgICAgLi4uY2xpcHBpbmdBbmNlc3RvcixcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIDogZWxlbWVudDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICB3aGlsZSAoaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgWydhYnNvbHV0ZScsICdmaXhlZCddLmluY2x1ZGVzKGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlLnBvc2l0aW9uKSB8fCBpc092ZXJmbG93RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBjdXJyZW50Tm9kZSk7XG4gICAgaWYgKHNob3VsZERyb3BDdXJyZW50Tm9kZSkge1xuICAgICAgLy8gRHJvcCBub24tY29udGFpbmluZyBibG9ja3MuXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlY29yZCBsYXN0IGNvbnRhaW5pbmcgYmxvY2sgZm9yIG5leHQgaXRlcmF0aW9uLlxuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZWxlbWVudCwgb2Zmc2V0UGFyZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB4ID0gcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLng7XG4gIGNvbnN0IHkgPSByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnk7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICAuLi4oYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpKVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUlRMKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJztcbn1cblxuY29uc3QgcGxhdGZvcm0gPSB7XG4gIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0LFxuICBnZXREb2N1bWVudEVsZW1lbnQsXG4gIGdldENsaXBwaW5nUmVjdCxcbiAgZ2V0T2Zmc2V0UGFyZW50LFxuICBnZXRFbGVtZW50UmVjdHMsXG4gIGdldENsaWVudFJlY3RzLFxuICBnZXREaW1lbnNpb25zLFxuICBnZXRTY2FsZSxcbiAgaXNFbGVtZW50LFxuICBpc1JUTFxufTtcblxuLy8gaHR0cHM6Ly9zYW10aG9yLmF1LzIwMjEvb2JzZXJ2aW5nLWRvbS9cbmZ1bmN0aW9uIG9ic2VydmVNb3ZlKGVsZW1lbnQsIG9uTW92ZSkge1xuICBsZXQgaW8gPSBudWxsO1xuICBsZXQgdGltZW91dElkO1xuICBjb25zdCByb290ID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHZhciBfaW87XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgKF9pbyA9IGlvKSA9PSBudWxsIHx8IF9pby5kaXNjb25uZWN0KCk7XG4gICAgaW8gPSBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHJlZnJlc2goc2tpcCwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHNraXAgPT09IHZvaWQgMCkge1xuICAgICAgc2tpcCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDE7XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAobmV4dFJlZlJlY3QueCAhPT0gcHJldlJlZlJlY3QueCB8fCBuZXh0UmVmUmVjdC55ICE9PSBwcmV2UmVmUmVjdC55IHx8IG5leHRSZWZSZWN0LndpZHRoICE9PSBwcmV2UmVmUmVjdC53aWR0aCB8fCBuZXh0UmVmUmVjdC5oZWlnaHQgIT09IHByZXZSZWZSZWN0LmhlaWdodCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyMjtcbiAgICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUpO1xuICAgICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgICB9KTtcbiAgICBjbGVhbnVwSW8gPT0gbnVsbCB8fCBjbGVhbnVwSW8oKTtcbiAgICAoX3Jlc2l6ZU9ic2VydmVyMiA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlcjIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBcdTIwMTRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHtcblx0YXJyb3csXG5cdGF1dG9QbGFjZW1lbnQsXG5cdGF1dG9VcGRhdGUsXG5cdGRldGVjdE92ZXJmbG93LFxuXHRjb21wdXRlUG9zaXRpb24sXG5cdG9mZnNldCxcblx0ZmxpcCxcblx0c2l6ZSxcblx0c2hpZnQsXG59IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBwb3NpdGlvblBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY29udHJvbEVsZW1lbnRcbiAqIEBwYXJhbSBwb3BwZXJFbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge1Byb21pc2V8Kn1cbiAqL1xuZnVuY3Rpb24gcG9zaXRpb25Qb3BwZXIoY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIG9wdGlvbnMpIHtcblx0Y29uc3QgYm9keSA9IGdldERvY3VtZW50KCkuYm9keTtcblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IGFycm93RWxlbWVudCA9IGNvbnRyb2xFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd11cIixcblx0XHQpO1xuXG5cdFx0Y29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0e1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9ucyxcblx0XHQpO1xuXG5cdFx0Y29uc3QgbWlkZGxld2FyZSA9IGNvbmZpZz8uW1wibWlkZGxld2FyZVwiXTtcblx0XHRpZiAoIWlzQXJyYXkobWlkZGxld2FyZSkpIHtcblx0XHRcdGlmIChpc1N0cmluZyhtaWRkbGV3YXJlKSkge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gbWlkZGxld2FyZS5zcGxpdChcIixcIikuZmlsdGVyKChsaW5lKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmUudHJpbSgpLmxlbmd0aCA+IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXSA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IGluIG1pZGRsZXdhcmUpIHtcblx0XHRcdGNvbnN0IGxpbmUgPSBtaWRkbGV3YXJlW2tleV07XG5cdFx0XHRpZiAoaXNGdW5jdGlvbihsaW5lKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzU3RyaW5nKGxpbmUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgTWlkZGxld2FyZSBtdXN0IGJlIGEgc3RyaW5nLCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdC4gR290ICR7dHlwZW9mIGxpbmV9YCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga3YgPSBsaW5lLnNwbGl0KFwiOlwiKTtcblx0XHRcdGNvbnN0IGZuID0ga3Yuc2hpZnQoKTtcblxuXHRcdFx0c3dpdGNoIChmbikge1xuXHRcdFx0XHRjYXNlIFwiZmxpcFwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGZsaXAoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNoaWZ0XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImF1dG9QbGFjZW1lbnRcIjpcblx0XHRcdFx0XHRsZXQgZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzID0gW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcInJpZ2h0XCJdO1xuXG5cdFx0XHRcdFx0Y29uc3QgZGVmUGxhY2VtZW50ID0ga3Y/LnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKGlzU3RyaW5nKGRlZlBsYWNlbWVudCkgJiYgZGVmUGxhY2VtZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBkZWZQbGFjZW1lbnRcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKChsaW5lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGxpbmUudHJpbSgpLmxlbmd0aCA+IDA7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMuaW5jbHVkZXMoY29uZmlnLnBsYWNlbWVudCkpIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5zcGxpY2UoXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmRleE9mKGNvbmZpZy5wbGFjZW1lbnQpLFxuXHRcdFx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnVuc2hpZnQoY29uZmlnLnBsYWNlbWVudCk7XG5cblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBhdXRvUGxhY2VtZW50KHtcblx0XHRcdFx0XHRcdGNyb3NzQXhpczogdHJ1ZSxcblx0XHRcdFx0XHRcdGF1dG9BbGlnbm1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGxvd2VkUGxhY2VtZW50czogZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJkZXRlY3RPdmVyZmxvd1wiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGRldGVjdE92ZXJmbG93KCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhcnJvd1wiOlxuXHRcdFx0XHRcdGlmIChhcnJvd0VsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGFycm93KHsgZWxlbWVudDogYXJyb3dFbGVtZW50IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNpemVcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaXplKHtcblx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCwgZWxlbWVudHMgfSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtYXhXaWR0aCA9IGJvZHkuY2xpZW50V2lkdGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heEhlaWdodCA9IGJvZHkuY2xpZW50SGVpZ2h0O1xuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVXaWR0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSGVpZ2h0IDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZUhlaWdodCA9IDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlV2lkdGggPiBtYXhXaWR0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gbWF4V2lkdGg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuXHRcdFx0XHRcdFx0XHRcdGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdFx0XHRcdFx0bWF4V2lkdGg6IGAke2F2YWlsYWJsZVdpZHRofXB4YCxcblx0XHRcdFx0XHRcdFx0XHRtYXhIZWlnaHQ6IGAke2F2YWlsYWJsZUhlaWdodH1weGAsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm9mZnNldFwiOlxuXHRcdFx0XHRcdGNvbnN0IG8gPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBvZmZzZXQocGFyc2VJbnQobykgfHwgMTApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiaGlkZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGhpZGUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVuY3Rpb246ICR7Zm59YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cG9wcGVyRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdFx0cG9wcGVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0YXV0b1VwZGF0ZShjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Y29tcHV0ZVBvc2l0aW9uKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCBjb25maWcpLnRoZW4oXG5cdFx0XHRcdCh7IHgsIHksIHBsYWNlbWVudCwgbWlkZGxld2FyZURhdGEgfSkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24ocG9wcGVyRWxlbWVudC5zdHlsZSwge1xuXHRcdFx0XHRcdFx0dG9wOiBcIjBcIixcblx0XHRcdFx0XHRcdGxlZnQ6IFwiMFwiLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7cm91bmRCeURQUih4KX1weCwke3JvdW5kQnlEUFIoeSl9cHgpYCxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChtaWRkbGV3YXJlRGF0YS5hcnJvdykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2lkZSA9IHBsYWNlbWVudC5zcGxpdChcIi1cIilbMF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IHN0YXRpY1NpZGUgPSB7XG5cdFx0XHRcdFx0XHRcdHRvcDogXCJib3R0b21cIixcblx0XHRcdFx0XHRcdFx0cmlnaHQ6IFwibGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRib3R0b206IFwidG9wXCIsXG5cdFx0XHRcdFx0XHRcdGxlZnQ6IFwicmlnaHRcIixcblx0XHRcdFx0XHRcdH1bc2lkZV07XG5cblx0XHRcdFx0XHRcdC8vIG1vbnN0ZXItYm9yZGVyLXdpZHRoID0gKyA0ICgyKjIpIChzaG91bGQgY29tZSBmcm9tIGNzcylcblx0XHRcdFx0XHRcdGNvbnN0IGFycm93TGVuID0gYXJyb3dFbGVtZW50Lm9mZnNldFdpZHRoICsgNDtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYm9yZGVyU3R5bGUgPSB7XG5cdFx0XHRcdFx0XHRcdGJvcmRlckxlZnQ6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyUmlnaHQ6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRcdGJvcmRlclRvcDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdEJvcmRlciA9XG5cdFx0XHRcdFx0XHRcdFwidmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNClcIjtcblxuXHRcdFx0XHRcdFx0c3dpdGNoIChzaWRlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJ0b3BcIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJSaWdodCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiYm90dG9tXCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyVG9wID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwibGVmdFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJyaWdodFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckJvdHRvbSA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyTGVmdCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gbWlkZGxld2FyZURhdGEuYXJyb3c7XG5cblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdGFycm93RWxlbWVudC5zdHlsZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IHggIT0gbnVsbCA/IGAke3h9cHhgIDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHR0b3A6IHkgIT0gbnVsbCA/IGAke3l9cHhgIDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHQvLyBFbnN1cmUgdGhlIHN0YXRpYyBzaWRlIGdldHMgdW5zZXQgd2hlblxuXHRcdFx0XHRcdFx0XHRcdC8vIGZsaXBwaW5nIHRvIG90aGVyIHBsYWNlbWVudHMnIGF4ZXMuXG5cdFx0XHRcdFx0XHRcdFx0cmlnaHQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0Ym90dG9tOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFtzdGF0aWNTaWRlXTogYCR7LWFycm93TGVuIC8gMn1weGAsXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBcInJvdGF0ZSg0NWRlZylcIixcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH0pLnJ1bigpO1xufVxuXG5mdW5jdGlvbiByb3VuZEJ5RFBSKHZhbHVlKSB7XG5cdGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cdHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZHByKSAvIGRwcjtcbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTZWxlY3RTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU2VsZWN0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgc2VsZWN0IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2ZsZXg6NCAwIDkwJTttaW4taGVpZ2h0OjEuNGVtO292ZXJmbG93OmF1dG87c2Nyb2xsYmFyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKSB2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7c2Nyb2xsYmFyLXdpZHRoOnRoaW47d2lkdGg6MTAwJX0uZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5vcGVuey13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXIsW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3BlbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstby1ib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOi40cmVtIC42cmVtO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6ZmlsbC1hdmFpbGFibGV9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4fX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31kaXZbZGF0YS1tb25zdGVyLXJvbGU9c2VsZWN0aW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O21hcmdpbjo1cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbi1jb250cm9sXXttYXJnaW4tcmlnaHQ6OHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1iYWRnZV17ZGlzcGxheTppbmxpbmUtZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2UtbGFiZWxde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2dhcDo3cHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1maWx0ZXJde2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MjAwO29yZGVyOjk5OTk5OTk5O3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXI6MDtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7bWluLXdpZHRoOjQwJTtvdXRsaW5lOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlfS5hY3RpdmVbZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXVtuYW1lPXBvcHBlci1maWx0ZXJde2hlaWdodDoxLjVlbTttYXJnaW46Mi41ZW07cGFkZGluZzoycHg7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKjIpfS5vcHRpb24tZmlsdGVyLWNvbnRyb2x7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07bWFyZ2luOi0xLjFlbSAtMS4xZW0gLjNlbX1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtoZWlnaHQ6MTZweDttYXJnaW4tbGVmdDo1cHg7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO29yZGVyOjJ9W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV0sW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW07bWluLWhlaWdodDoxNnB4O3dpZHRoOjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xLjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDEwLjI5M2w1LjY0Ni01LjY0N2EuNS41IDAgMCAxIC43MDguNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4IDBsLTYtNmEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm9wZW5bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmVtcHR5W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5jbGVhcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lcnJvcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKX0ubG9hZGluZ1tkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6YWN0aXZpdHk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwwLC4yLDEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYWN0aXZpdHknJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyUzRSUzQ2NpcmNsZSBjeD0nOCcgY3k9JzgnIHI9JzgnLyUzRSUzQy9zdmclM0VcXFwiKX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtzY3JvbGxiYXItd2lkdGg6dGhpbn1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjZweCA1cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0gbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbD5kaXZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5vLW9wdGlvbnNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTttYXJnaW46MS4xZW0gMCAwIDEuMWVtfS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdLFtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1mb2N1c2VkPXRydWVde291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKTtvdXRsaW5lLW9mZnNldDotMnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmlucHV0OmZvY3VzLFtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYnVpbGRNYXAgfSBmcm9tIFwiLi4vLi4vZGF0YS9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdHBvcHBlckVsZW1lbnRTeW1ib2wsXG5cdGdldFN1bW1hcnlUZW1wbGF0ZSxcblx0Z2V0U2VsZWN0aW9uVGVtcGxhdGUsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlID0gXCJObyBvcHRpb25zIGF2YWlsYWJsZS5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSA9IFwiQ2xpY2sgdG8gbG9hZCBvcHRpb25zLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RmlsdGVyRXZlbnRTeW1ib2wgPSBTeW1ib2woXCJrZXlGaWx0ZXJFdmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbGF6eUxvYWREb25lU3ltYm9sID0gU3ltYm9sKFwibGF6eUxvYWREb25lXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xlYXJPcHRpb25FdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbGVhck9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5wdXRFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJpbnB1dEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjaGFuZ2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjaGFuZ2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZWxlY3Rpb25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2VsZWN0aW9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaW5saW5lRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXG5cdFwicG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFwiLFxuKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcHRpb25zRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm9wdGlvbnNFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub09wdGlvbnNBdmFpbGFibGVFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2wgPSBTeW1ib2woXCJAQGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fVVAgPSAxO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRk9DVVNfRElSRUNUSU9OX0RPV04gPSAyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9SRU1PVEUgPSBcInJlbW90ZVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9PUFRJT05TID0gXCJvcHRpb25zXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfUE9TSVRJT05fUE9QUEVSID0gXCJwb3BwZXJcIjtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUgPSBcImlubGluZVwiO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlbGVjdGlvblxuICogQHByb3BlcnR5IHsqfSB2YWx1ZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGxhYmVsXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjIuMFxuICovXG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBzZWxlY3QgZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICogSXQgc3VwcG9ydHMgZmlsdGVyaW5nLCBsb2NhbCBhbmQgcmVtb3RlLCBtdWx0aXBsZSBzZWxlY3Rpb24gYW5kIGhhcyBhXG4gKiB0ZW1wbGF0ZSBzeXN0ZW0gZm9yIGRpc3BsYXlpbmcgdGhlIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9zZWxlY3QucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1zZWxlY3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItc2VsZWN0PjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtTZWxlY3R9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9zZWxlY3QuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAqIGBgYFxuICpcbiAqICMjIEV2ZW50c1xuICpcbiAqIFRoZSBldmVudCBgbW9uc3Rlci1jaGFuZ2VgIGlzIHNlbnQgYXMgc29vbiBhcyBzb21lb25lIGhhcyBjbGlja2VkIG9uIGEgaW5wdXQgY29udHJvbC5cbiAqIGBtb25zdGVyLWNoYW5nZWRgIGlzIHNlbnQgYXMgc29vbiBhcyB0aGUgY29udHJvbCBoYXMgcHJvY2Vzc2VkIHRoaXMgaW5wdXQuXG4gKiBUaGUgYG1vbnN0ZXItY2hhbmdlZGAgZXZlbnQgaXMgc2VudCB3aGVuIHNldHRpbmcgYSBzZWxlY3Rpb24uIElmIHRoZSBvcHRpb25zIGhhdmUgYmVlbiBzZXQsIHRoZSBgbW9uc3Rlci1vcHRpb25zLXNldGAgZXZlbnQgaXMgc2VudC5cbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWNoYW5nZScsKGUpPT5jb25zb2xlLmxvZyhlLmRldGFpbCkpXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItY2hhbmdlZCcsKGUpPT5jb25zb2xlLmxvZyhlLmRldGFpbCkpXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItc2VsZWN0ZWQnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW9wdGlvbnMtc2V0JywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qc1xuICogQHN0YXJ0dW1sIHNlbGVjdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBTZWxlY3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgU2VsZWN0IGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBAZXh0ZW5kcyBDdXN0b21Db250cm9sXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX1cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gY29udmVydFNlbGVjdGlvblRvVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEBzaW5jZSAxLjIuMFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udmVydFZhbHVlVG9TZWxlY3Rpb24uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHQuY2FsbCh0aGlzLCByZXN1bHQuc2VsZWN0aW9uKVxuXHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdG9nZ2xlRXZlbnRUeXBlPWNsaWNrLHRvdWNoIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVsZWdhdGVzRm9jdXM9ZmFsc2UgbG9yZW0gW3NlZSBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NoYWRvd1Jvb3QvZGVsZWdhdGVzRm9jdXMpXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG9wdGlvbnMgU2VsZWN0aW9uIG9mIGtleSBpZGVudGlmaWVyIHBhaXJzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uIGFuZCBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLmxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10udmFsdWVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52aXNpYmlsaXR5IGhpZGRlbiBvciB2aXNpYmxlXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHNlbGVjdGlvbiBTZWxlY3RlZCBvcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7SW50ZWdlcn0gc2hvd01heE9wdGlvbnM9MTAgTWF4aW11bSBudW1iZXIgb2YgdmlzaWJsZSBvcHRpb25zIGJlZm9yZSBhIHNjcm9sbCBiYXIgc2hvdWxkIGJlIGRpc3BsYXllZC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9cmFkaW8gTXVsdGlwbGUgKGNoZWNrYm94KSBvciBzaW5nbGUgc2VsZWN0aW9uIChyYWRpbylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWU9KHJhbmRvbSBpZCkgTmFtZSBvZiB0aGUgZm9ybSBmaWVsZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwiYXBwbGljYXRpb24vanNvblwifX1cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbm5vdC1iZS1sb2FkZWQgY2Fubm90IGJlIGxvYWRlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlIG5vIG9wdGlvbnMgYXZhaWxhYmxlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuc2VsZWN0LWFuLW9wdGlvbiBzZWxlY3QgYW4gb3B0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9uIG5vIG9wdGlvbiBpbiB0aGUgbGlzdCwgbWF5YmUgeW91IGhhdmUgdG8gY2hhbmdlIHRoZSBmaWx0ZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIExpc3Qgd2l0aCBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyQWxsPXRydWUgRGlzcGxheSBvZiBhIGRlbGV0ZSBidXR0b24gdG8gZGVsZXRlIHRoZSBlbnRpcmUgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXI9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGtleSBmb3IgZGVsZXRpbmcgdGhlIHNwZWNpZmljIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmxhenlMb2FkPWZhbHNlIExvYWQgb3B0aW9ucyB3aGVuIGZpcnN0IG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnM9ZmFsc2UgSWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgc2VsZWN0aW9uIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZpbHRlci5kZWZhdWx0VmFsdWU9KiBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZpbHRlci5tb2RlPW9wdGlvbnMgRmlsdGVyIG1vZGUsIHZhbHVlczogb3B0aW9ucywgcmVtb3RlLCBkaXNhYmxlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZU1hcHBpbmcgTWFwcGluZyBvZiB0aGUgdGVtcGxhdGUgcGxhY2Vob2xkZXJzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZU1hcHBpbmcuc2VsZWN0ZWQgU2VsZWN0ZWQgVGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD1ib3R0b20gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG1vZGlmaWVycz17bmFtZTpvZmZzZXR9IFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbWFwcGluZ1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5zZWxlY3Rvcj0qIFBhdGggdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLmxhYmVsVGVtcGxhdGU9XCJcIiB0ZW1wbGF0ZSB3aXRoIHRoZSBsYWJlbCBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvcm0gJHtuYW1lfSwgd2hlcmUgbmFtZSBpcyB0aGUga2V5ICgqKilcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcudmFsdWVUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIHZhbHVlIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXlcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t8dW5kZWZpbmVkfSBtYXBwaW5nLmZpbHRlciBGaWx0ZXJpbmcgb2YgdmFsdWVzIHZpYSBhIGZ1bmN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja3x1bmRlZmluZWR9IGZvcm1hdHRlci5zZWxlY3Rpb24gZm9ybWF0IHNlbGVjdGlvbiBsYWJlbFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dG9nZ2xlRXZlbnRUeXBlOiBbXCJjbGlja1wiLCBcInRvdWNoXCJdLFxuXHRcdFx0XHRkZWxlZ2F0ZXNGb2N1czogZmFsc2UsXG5cdFx0XHRcdG9wdGlvbnM6IFtdLFxuXHRcdFx0XHRzZWxlY3Rpb246IFtdLFxuXHRcdFx0XHRzaG93TWF4T3B0aW9uczogMTAsXG5cdFx0XHRcdHR5cGU6IFwicmFkaW9cIixcblx0XHRcdFx0bmFtZTogbmV3IElEKFwic1wiKS50b1N0cmluZygpLFxuXHRcdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRcdGNsZWFyQWxsOiB0cnVlLFxuXHRcdFx0XHRcdGNsZWFyOiB0cnVlLFxuXHRcdFx0XHRcdGxhenlMb2FkOiBmYWxzZSxcblx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0OiBmYWxzZSxcblx0XHRcdFx0XHRlbXB0eVZhbHVlSWZOb09wdGlvbnM6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRcdFwiY2Fubm90LWJlLWxvYWRlZFwiOiBcIkNhbm5vdCBiZSBsb2FkZWRcIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtYXZhaWxhYmxlXCI6IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UsXG5cdFx0XHRcdFx0XCJjbGljay10by1sb2FkLW9wdGlvbnNcIjogY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSxcblx0XHRcdFx0XHRcInNlbGVjdC1hbi1vcHRpb25cIjogXCJTZWxlY3QgYW4gb3B0aW9uXCIsXG5cdFx0XHRcdFx0XCJzdW1tYXJ5LXRleHRcIjoge1xuXHRcdFx0XHRcdFx0emVybzogXCJObyBlbnRyaWVzIHdlcmUgc2VsZWN0ZWRcIixcblx0XHRcdFx0XHRcdG9uZTogJzxzcGFuIGNsYXNzPVwibW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGxcIj4xPC9zcGFuPiBlbnRyeSB3YXMgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdFx0b3RoZXI6XG5cdFx0XHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+JHtjb3VudH08L3NwYW4+IGVudHJpZXMgd2VyZSBzZWxlY3RlZCcsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFwiVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBsaXN0LlwiLFxuXHRcdFx0XHRcdFwibm8tb3B0aW9ucy1mb3VuZFwiOlxuXHRcdFx0XHRcdFx0XCJObyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGxpc3QuIFBsZWFzZSBjb25zaWRlciBtb2RpZnlpbmcgdGhlIGZpbHRlci5cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRjb250cm9sOiBudWxsLFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdFx0XHRcdGVtcHR5T3B0aW9uczogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZpbHRlcjoge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogXCIqXCIsXG5cdFx0XHRcdFx0bW9kZTogRklMVEVSX01PREVfRElTQUJMRUQsXG5cdFx0XHRcdFx0cG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0XHRiYWRnZTogXCJtb25zdGVyLWJhZGdlLXByaW1hcnlcIixcblx0XHRcdFx0XHRzdGF0dXNPclJlbW92ZUJhZGdlOiBcImVtcHR5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRzZWxlY3RvcjogXCIqXCIsXG5cdFx0XHRcdFx0bGFiZWxUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHR2YWx1ZVRlbXBsYXRlOiBcIlwiLFxuXHRcdFx0XHRcdGZpbHRlcjogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBidWlsZFNlbGVjdGlvbkxhYmVsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZU1hcHBpbmc6IHtcblx0XHRcdFx0XHQvKiogd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVgIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQuICovXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGdldFNlbGVjdGlvblRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdG1pZGRsZXdhcmU6IFtcImZsaXBcIiwgXCJvZmZzZXQ6MVwiXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbChzZWxmKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwoc2VsZik7XG5cblx0XHRjb25zdCBsYXp5TG9hZEZsYWcgPSBzZWxmLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpO1xuXG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bigpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJiAhbGF6eUxvYWRGbGFnKSB7XG5cdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwibG9hZGluZ1wiKTtcblxuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZmV0Y2goKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHNlbGYsIHNlbGYuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHNlbGYsIFtdKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sIDEwMCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IGxhc3RWYWx1ZSA9IHNlbGYudmFsdWU7XG5cdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBuID0gdGhpcy5nZXRTdWJqZWN0KCk/Lm9wdGlvbnM/LnZhbHVlO1xuXG5cdFx0XHRcdFx0aWYgKGxhc3RWYWx1ZSAhPT0gbikge1xuXHRcdFx0XHRcdFx0bGFzdFZhbHVlID0gbjtcblx0XHRcdFx0XHRcdHNldFNlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHQuY2FsbChzZWxmLCBuKVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB7fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0YXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQuY2FsbChzZWxmKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYmx1clxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Ymx1ckZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSWYgbm8gdXJsIGlzIHNwZWNpZmllZCwgdGhlIG9wdGlvbnMgYXJlIHRha2VuIGZyb20gdGhlIENvbXBvbmVudCBpdHNlbGYuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsIFVSTCB0byBmZXRjaCB0aGUgb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuXHRcdFx0dXJsID0gdmFsaWRhdGVTdHJpbmcodXJsKTtcblx0XHR9XG5cdFx0XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZldGNoRGF0YS5jYWxsKHRoaXMsIHVybCkudGhlbigobWFwKSA9PiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0aXNBcnJheShtYXApIHx8XG5cdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMuaW1wb3J0T3B0aW9ucyhtYXApO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLFwiY2xvc2VkXCIpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sIDEwKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlXCIpKTtcblx0XHRcdH0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHBhcnNlU2xvdHNUb09wdGlvbnMuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0fSkucnVuKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHNpbmNlIDAuMTYuMFxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICogQHRocm93cyB7RXJyb3J9IG1hcCBpcyBub3QgaXRlcmFibGVcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblxuXHQgKi9cblx0aW1wb3J0T3B0aW9ucyhkYXRhKSB7XG5cdFx0Y29uc3QgbWFwcGluZ09wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmdcIiwge30pO1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXHRcdGNvbnN0IGxhYmVsVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1wibGFiZWxUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCB2YWx1ZVRlbXBsYXRlID0gbWFwcGluZ09wdGlvbnM/LltcInZhbHVlVGVtcGxhdGVcIl07XG5cdFx0Y29uc3QgZmlsdGVyID0gbWFwcGluZ09wdGlvbnM/LltcImZpbHRlclwiXTtcblxuXHRcdGxldCBmbGFnID0gZmFsc2U7XG5cdFx0aWYgKGxhYmVsVGVtcGxhdGUgPT09IFwiXCIpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwiZW1wdHkgbGFiZWwgdGVtcGxhdGVcIik7XG5cdFx0XHRmbGFnID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWVUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSB2YWx1ZSB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChmbGFnID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGxhYmVsIGNvbmZpZ3VyYXRpb25cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWFwID0gYnVpbGRNYXAoZGF0YSwgc2VsZWN0b3IsIGxhYmVsVGVtcGxhdGUsIHZhbHVlVGVtcGxhdGUsIGZpbHRlcik7XG5cblx0XHRjb25zdCBvcHRpb25zID0gW107XG5cdFx0aWYgKCFpc0l0ZXJhYmxlKG1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hcCBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXG5cdFx0bWFwLmZvckVhY2goKGxhYmVsLCB2YWx1ZSkgPT4ge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBtYXAuc2l6ZSk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vcHRpb25zLXNldFwiLCB7XG5cdFx0XHRvcHRpb25zLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuXHQgKi9cblx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItc2VsZWN0XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZGVwcmVjYXRlZCAyMDI0LTAxLTIxICh5b3Ugc2hvdWxkIHVzZSBkYXRhLW1vbnN0ZXItb3B0aW9uLS4uLilcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdGVtcGxhdGUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zZWxlY3RlZC10ZW1wbGF0ZVwiKTtcblx0aWYgKGlzU3RyaW5nKHRlbXBsYXRlKSkge1xuXHRcdGlmICghb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSkgb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSA9IHt9O1xuXG5cdFx0c3dpdGNoICh0ZW1wbGF0ZSkge1xuXHRcdFx0Y2FzZSBcInN1bW1hcnlcIjpcblx0XHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRcdG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl1bXCJzZWxlY3RlZFwiXSA9IGdldFN1bW1hcnlUZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3RlZFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcImludmFsaWQgdGVtcGxhdGUsIHVzZSBzdW1tYXJ5IG9yIHNlbGVjdGVkXCIsXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblRlbXBsYXRlKCkge1xuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwic2VsZWN0aW9uIHBhdGg6c2VsZWN0aW9uXCIgcm9sZT1cInNlYXJjaFwiXG4gICAgICAgICAgICA+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJpbmxpbmUtZmlsdGVyXCIgbmFtZT1cImlubGluZS1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICA+PGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuY29udHJvbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gZ2V0U3VtbWFyeVRlbXBsYXRlKCkge1xuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgIHBhcnQ9XCJpbmxpbmUtZmlsdGVyXCIgbmFtZT1cImlubGluZS1maWx0ZXJcIlxuICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLnNlbGVjdGVkXCI+PC9kaXY+ICAgIFxuPC9kaXY+YDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VTbG90c1RvT3B0aW9ucygpIHtcblx0bGV0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdGlmICghaXNJdGVyYWJsZShvcHRpb25zKSkge1xuXHRcdG9wdGlvbnMgPSBbXTtcblx0fVxuXG5cdGxldCBjb3VudGVyID0gMTtcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgXCJkaXZcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdGxldCB2YWx1ZSA9IChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG5cdFx0bGV0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKSkge1xuXHRcdFx0dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWwgPSBub2RlLm91dGVySFRNTDtcblxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0dmlzaWJpbGl0eSxcblx0XHR9KTtcblx0fSk7XG5cblx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgb3B0aW9ucy5sZW5ndGgpO1xuXHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogd2FpdCB1bnRpbCBhbGwgb3B0aW9ucyBhcmUgZmluaXNoZWQgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50fSB0YXJnZXRMZW5ndGhcbiAqL1xuZnVuY3Rpb24gcnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkKHRhcmdldExlbmd0aCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoIXNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAobXV0YXRpb25zTGlzdCwgb2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBydW4gPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJ1biA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW4gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG5vZGVzID0gc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0YGRpdlske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0XHRcdCk7XG5cblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IHRhcmdldExlbmd0aCkge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwoc2VsZik7XG5cdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUoc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0sIHtcblx0XHRhdHRyaWJ1dGVzOiBmYWxzZSxcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBvID0gb3B0aW9ucz8uW2ldO1xuXHRcdGlmIChpc09iamVjdChvKSAmJiBvPy5bXCJ2YWx1ZVwiXSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBvPy5bXCJsYWJlbFwiXTtcblx0XHR9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKG8pICYmIG8gPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdmFsdWUgZm91bmRcbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZWxlY3Rpb25cIik7XG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNvbnN0IGxhYmVsID0gY2FsbGJhY2suY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKGlzU3RyaW5nKGxhYmVsKSkgcmV0dXJuIGxhYmVsO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0cmV0dXJuIGAke3ZhbHVlfWA7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuY2Fubm90LWJlLWxvYWRlZFwiLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU3BhY2VcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZUkxOG4oKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0XHRcdHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHNlbGYpO1xuXHRcdFx0fSkucnVuKCk7XG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRUcmFuc2xhdGlvbigpIHtcblx0Y29uc3QgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKFwiZW5cIikuYXNzaWduVHJhbnNsYXRpb25zKFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIsIHt9KSxcblx0KTtcblxuXHR0cnkge1xuXHRcdGNvbnN0IGRvYyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0dHJhbnNsYXRpb24ubG9jYWxlID0gZG9jLmxvY2FsZTtcblx0fSBjYXRjaCAoZSkge31cblxuXHRyZXR1cm4gdHJhbnNsYXRpb247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd8Kn1cbiAqL1xuZnVuY3Rpb24gc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0KCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbnMgPSBnZXREZWZhdWx0VHJhbnNsYXRpb24uY2FsbCh0aGlzKTtcblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoXG5cdFx0XCJzdW1tYXJ5LXRleHRcIixcblx0XHRzZWxlY3Rpb25zLmxlbmd0aCxcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IG5ldyBGb3JtYXR0ZXIoe1xuXHRcdGNvdW50OiBTdHJpbmcoc2VsZWN0aW9ucy5sZW5ndGgpLFxuXHR9KS5mb3JtYXQodGV4dCk7XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zZWxlY3RlZFwiLCBzZWxlY3RlZFRleHQpO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIik7XG5cdGNvbnN0IG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIik7XG5cblx0aWYgKFxuXHRcdGN1cnJlbnQgPT09IFwiXCIgfHxcblx0XHRjdXJyZW50ID09PSB1bmRlZmluZWQgfHxcblx0XHRjdXJyZW50ID09PSBtc2cgfHxcblx0XHRjdXJyZW50ID09PSBudWxsXG5cdCkge1xuXHRcdGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge05vZGVMaXN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25FbGVtZW50cygpIHtcblx0cmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uKCkge1xuXHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF07XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIG9wdGlvbnMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgdmlzaWJsZSA9IDA7XG5cdGxldCBvcHRpb25IZWlnaHQgPSAwO1xuXHRjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcInNob3dNYXhPcHRpb25zXCIsIDEwKTtcblxuXHRsZXQgc2Nyb2xsRmxhZyA9IGZhbHNlO1xuXHRmb3IgKGNvbnN0IFssIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZShvcHRpb24pO1xuXHRcdGlmIChjb21wdXRlZFN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSBjb250aW51ZTtcblxuXHRcdGxldCBoID0gb3B0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblx0XHRoICs9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi10b3BcIiksIDEwKTtcblx0XHRoICs9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcblx0XHRvcHRpb25IZWlnaHQgKz0gaDtcblxuXHRcdHZpc2libGUrKztcblxuXHRcdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRpZiAodmlzaWJsZSA+IG1heCkge1xuXHRcdHZpc2libGUgPSBtYXg7XG5cdFx0c2Nyb2xsRmxhZyA9IHRydWU7XG5cdH1cblxuXHRpZiAodmlzaWJsZSA9PT0gMCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIikubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcblx0XHRcdFx0XCJtZXNzYWdlcy5lbXB0eU9wdGlvbnNcIixcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIiksXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubW9kZVwiKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFx0XCJtZXNzYWdlcy5lbXB0eU9wdGlvbnNcIixcblx0XHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1mb3VuZFwiKSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0fVxuXG5cdGNvbnN0IHN0eWxlcyA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUodGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0pO1xuXHRsZXQgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcblx0cGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cblx0bGV0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRtYXJnaW4gKz0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cblx0Y29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZvdW5kID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRpZiAoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuXHRcdFx0XHQuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Zm9jdXNlZC5mb2N1cygpO1xuXHRcdFx0Zm9jdXNlZC5zZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCwgdHJ1ZSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpb25zKCkge1xuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdFx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSkge1xuXHRcdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGZvciAoY29uc3QgW2ksIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRcdGlmIChvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIFwidHJ1ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMDAsICgpID0+IHtcblx0XHRcdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICpcblxuICovXG5cbi8qKlxuICogTWV0aG9kIGhhbmRsZUZpbHRlcktleUV2ZW50cyBpcyB1c2VkIHRvIGhhbmRsZSBmaWx0ZXIga2V5IGV2ZW50cy5cbiAqIERlYm91bmNlIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGhhbmRsZUZpbHRlcktleUV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7dm9pZH0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICovXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJLZXlFdmVudHMoKSB7XG5cdGlmICh0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuXHRcdH1cblx0fVxuXG5cdHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpICE9PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdGZpbHRlck9wdGlvbnMuY2FsbCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZS5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckZyb21SZW1vdGUoKSB7XG5cdGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBvcHRpb25VcmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCFvcHRpb25VcmwpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFVSTCBmb3IgUmVtb3RlIEZpbHRlci5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgZmlsdGVyVmFsdWUgPSBlbmNvZGVVUkkoXG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCksXG5cdFx0KTtcblx0XHRsZXQgdXJsID0gb3B0aW9uVXJsO1xuXHRcdGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHR1cmwgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiBmaWx0ZXJWYWx1ZSB9KS5mb3JtYXQob3B0aW9uVXJsKTtcblx0XHR9XG5cblx0XHR0aGlzLmZldGNoKHVybClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH0pLnJ1bigpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdFx0ZmlyZUV2ZW50KGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKSwgXCJjbGlja1wiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJUYWJcIiAmJiAhc2hpZnRLZXk6XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG5cdFx0XHQvLyBoYW5kbGVkIGJ5IHRyZWUgc2VsZWN0XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHAgPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRcdGlmIChwPy5bMF0gaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJNb2RlKCkge1xuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikpIHtcblx0XHRjYXNlIEZJTFRFUl9NT0RFX09QVElPTlM6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfT1BUSU9OUztcblx0XHRjYXNlIEZJTFRFUl9NT0RFX1JFTU9URTpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9SRU1PVEU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9ESVNBQkxFRDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJsdXJGaWx0ZXIoKSB7XG5cdGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c1BvcHBlckZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXG5cdGlmICghKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFBvcHBlciBGaWx0ZXIgRWxlbWVudC5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzSW5saW5lRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoXG5cdFx0KCFpc0FycmF5KG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSAmJlxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBlLnZhbHVlKSxcblx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgc2VsZWN0aW9uKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZU9uU2VsZWN0XCIpID09PSB0cnVlKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBbXSlcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQoKSB7XG5cdC8vIHByZXZlbnQgbXVsdGlwbGUgY2FsbHNcblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9IDA7XG5cdH1cblxuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPiAwKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdKys7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRpZiAoXG5cdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHQpIHtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cblx0XHRsZXQgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIik7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jbGljay10by1sb2FkLW9wdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZW1wdHlWYWx1ZUlmTm9PcHRpb25zXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0XHR9XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoXG5cdFx0c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0c2VsZWN0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XCJtZXNzYWdlcy5jb250cm9sXCIsXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpKTtcblxuXHRsZXQgdXBkYXRlZCA9IGZhbHNlO1xuXHRsZXQgdmFsdWVDb3VudGVyID0gMTtcblx0Zm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuXHRcdGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBgJHt2YWx1ZUNvdW50ZXIrK31gO1xuXHRcdFx0b3B0aW9uLmxhYmVsID0gb3B0aW9uLnZhbHVlO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBvcHRpb24ubGFiZWw7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblx0fVxuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcyk7XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBjaGVja09wdGlvblN0YXRlKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXSBpbnB1dGAsXG5cdCk7XG5cblx0bGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoIWlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0Y29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcblx0XHRyZXR1cm4gYS52YWx1ZTtcblx0fSk7XG5cblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0aWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IGZhbHNlKSBlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbih2YWx1ZSkge1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKHYpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdmFsdWUucG9wKCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcblx0aWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHNlbGVjdGlvbik7XG5cdFx0c2VsZWN0aW9uID0gcmVzdWx0Py5zZWxlY3Rpb247XG5cdH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic2VsZWN0aW9uXCIsIHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKSk7XG5cdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblxuXHR0cnkge1xuXHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXNlbGVjdGVkXCIsIHtcblx0XHRzZWxlY3Rpb24sXG5cdH0pO1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgQ0xBU1NOQU1FID0gXCJzZWxlY3RlZFwiO1xuXG5cdFx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpub3QoOmNoZWNrZWQpXCIpO1xuXG5cdFx0aWYgKG5vdFNlbGVjdGVkKSB7XG5cdFx0XHRub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcblx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdHNlbGVjdGVkLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NOQU1FKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YSh1cmwpIHtcblx0aWYgKCF1cmwpIHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdGNvbnN0IGZldGNoT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBkZWxheVdhdGNoPWZhbHNlO1xuXHRcblx0Ly8gaWYgZmV0Y2ggc2hvcnQgdGltZSwgZG8gbm90IHNob3cgbG9hZGluZyBiYWRnZSwgYmVjYXVzZSBvZiBmbGlja2VyaW5nXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmKGRlbGF5V2F0Y2g9PT10cnVlKSByZXR1cm47XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cdFx0ZGVsYXlXYXRjaD10cnVlO1xuXHR9LDUwMCk7XG5cdFxuXHR1cmwgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiB0aGlzLmdldE9wdGlvbihcImZpbHRlci5kZWZhdWx0VmFsdWVcIikgfSkuZm9ybWF0KFxuXHRcdHVybCxcblx0KTtcblxuXHRjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblx0cmV0dXJuIGdsb2JhbFxuXHRcdC5mZXRjaCh1cmwsIGZldGNoT3B0aW9ucylcblx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdGRlbGF5V2F0Y2g9dHJ1ZTtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cdFx0XHRpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHJlc3BvbnNlICR7Y29udGVudFR5cGV9YCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkXCIpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRkZWxheVdhdGNoPXRydWU7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsXCJjbG9zZWRcIik7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblxuXHRjb25zdCBsYXp5TG9hZEZsYWcgPVxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIikgJiYgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlO1xuXG5cdGlmIChsYXp5TG9hZEZsYWcgPT09IHRydWUpIHtcblx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gPSB0cnVlO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmZldGNoKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwodGhpcywgW10pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHRcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0aWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwib3BlblwiKTtcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1zZWxlY3Rpb24tY2xlYXJlZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJhZGdlID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJiYWRnZVwiKTtcblx0XHRcdGlmIChiYWRnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYmFkZ2UuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dmFsdWVgKTtcblxuXHRcdFx0XHRsZXQgc2VsZWN0aW9uID0gc2VsZi5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5maWx0ZXIoKGIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgIT09IGIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldFNlbGVjdGlvblxuXHRcdFx0XHRcdC5jYWxsKHNlbGYsIHNlbGVjdGlvbilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSBzZWxmKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHNlbGYpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltpbnB1dEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb24tY29udHJvbFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VcIiwge1xuXHRcdFx0XHRcdHR5cGU6IGV2ZW50LnR5cGUsXG5cdFx0XHRcdFx0dmFsdWU6IGVsZW1lbnQudmFsdWUsXG5cdFx0XHRcdFx0Y2hlY2tlZDogZWxlbWVudC5jaGVja2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwiZmlsdGVyXCJcblx0XHRcdCkge1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGdhdGhlclN0YXRlLmNhbGwoc2VsZik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VkXCIsIGV2ZW50Py5kZXRhaWwpO1xuXHR9O1xuXG5cdHNlbGZba2V5RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aC5zaGlmdCgpO1xuXG5cdFx0bGV0IHJvbGU7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdHJvbGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHQvLyBmb2N1c0ZpbHRlci5jYWxsKHNlbGYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZSA9IGVsZW1lbnQuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9XWApO1xuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcImZpbHRlclwiOlxuXHRcdFx0XHRoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJ0b2dnbGVcIjpcblx0XHRcdFx0aGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCB0eXBlcyA9IHNlbGYuZ2V0T3B0aW9uKFwidG9nZ2xlRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKTtcblxuXHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVzKSkge1xuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwiY29udGFpbmVyXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0fSk7XG5cblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGVsZW1lbnQuY2xvc2VzdChcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbC5jbGFzc0xpc3QuY29udGFpbnMoXCJjbGVhclwiKSkge1xuXHRcdFx0XHRcdFx0XHRjbGVhclNlbGVjdGlvbi5jYWxsKHNlbGYpO1xuXG5cdFx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcIiwge30pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0Ly8gYmFkZ2UsIHNlbGVjdGlvblxuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtb25zdGVyLWNoYW5nZVwiLCBzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgc2VsZltrZXlFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcyhzdWdnZXN0aW9uKSB7XG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGNsZWFyQWxsRmxhZyA9XG5cdFx0XHRpc0FycmF5KHNlbGVjdGlvbikgJiZcblx0XHRcdHNlbGVjdGlvbi5sZW5ndGggPiAwICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsZWFyQWxsXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIpO1xuXG5cdFx0aWYgKGNsZWFyQWxsRmxhZykge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiY2xlYXJcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzdWdnZXN0aW9uID09PSBcImxvYWRpbmdcIikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwib3BlblwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwib3BlblwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGlmIChcblx0XHRcdG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdFx0KSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlbXB0eVwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZW1wdHlcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24pIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBzdWdnZXN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIHN1Z2dlc3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fSwgMik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tzZWxlY3Rpb25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c2VsZWN0aW9uXWAsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwiaW5saW5lLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cInBvcHBlci1maWx0ZXJcIl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdID1cblx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnBhcmVudEVsZW1lbnQ7XG5cdHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25zXWAsXG5cdCk7XG5cdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwibm8tb3B0aW9uc1wiXWAsXG5cdCk7XG5cdHRoaXNbc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHRcdCk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWZpbHRlcmVkIHBhdGg6b3B0aW9ucy5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHlcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucyB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgIG5hbWUgcGF0aDpuYW1lLCBcbiAgICAgICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgcHJlZml4Om9wdGlvbi0gfCBzdWZmaXg6IGZvcm0sXG4gICAgICAgICAgICBjbGFzcyBwYXRoOm9wdGlvbnMuY2xhc3MgXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm9wdGlvbnMgfCBpbmRleDpsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTZWxlY3QpO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1BvcHBlclN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBQb3BwZXJTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgUG9wcGVyU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBwb3BwZXIgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd31kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEB0aGlzIHtDdXN0b21Db250cm9sfVxuICovXG5cbi8qKlxuICogVGhlIFBvcHBlciBpc3QgYW4gZWxlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYSBwb3BwZXIuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9wb3BwZXIucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXBvcHBlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcG9wcGVyJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyPjwvbW9uc3Rlci1wb3BwZXI+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtQb3BwZXJ9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9wb3BwZXIuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXInKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXIucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gUG9wcGVyXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBwb3BwZXIgYnV0dG9uXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9wb3BwZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIC0gVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiAtIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZSAtIFRoZSBtb2RlIG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYGNsaWNrYCwgYGVudGVyYCBgaG92ZXJgLCBgbWFudWFsYCwgYGZvY3VzYCwgXCJhdXRvXCIgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgLSBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50IC0gVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgIGFuZCBgcmlnaHRgLlxuXHQgKiBAcHJvcGVydHkge0FycmF5PGZ1bmN0aW9uPn0gcG9wcGVyLm1pZGRsZXdhcmUgLSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbnMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtBcnJheTxmdW5jdGlvbj59IHBvcHBlci5taWRkbGV3YXJlSW5pdCAtIFRoZSBtaWRkbGV3YXJlIGluaXQgZnVuY3Rpb25zIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyAtIFRoZSBmZWF0dXJlcyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnByZXZlbnRQcm9wYWdhdGVPcGVuRXZlbnRzIC0gUHJldmVudHMgdGhlIG9wZW4gZXZlbnQgZnJvbSBiZWluZyBzZW50LlxuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJob3ZlciBmb2N1c1wiLFxuXHRcdFx0Y29udGVudDogXCI8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD5cIixcblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcImF1dG9QbGFjZW1lbnRcIiwgXCJvZmZzZXQ6MTBcIiwgXCJhcnJvd1wiXSxcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRwcmV2ZW50T3BlbkV2ZW50U2VudDogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBvcHBlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtQb3BwZXJTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJ9XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJ9XG5cdCAqL1xuXHRoaWRlRGlhbG9nKCkge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJ9XG5cdCAqL1xuXHR0b2dnbGVEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fTtcblxuXHRsZXQgbW9kZXMgPSBudWxsO1xuXHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRtb2RlcyA9IG1vZGVPcHRpb24uc3BsaXQoXCIgXCIpO1xuXHR9XG5cblx0aWYgKFxuXHRcdG1vZGVzID09PSBudWxsIHx8XG5cdFx0bW9kZXMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdG1vZGVzLmxlbmd0aCA9PT0gMFxuXHQpIHtcblx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgbW9kZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZXMpKSB7XG5cdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBtb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJ9XG4gKiBAdGhyb3dzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXJCeU1vZGUobW9kZSkge1xuXHRzd2l0Y2ggKG1vZGUpIHtcblx0XHRjYXNlIFwibWFudWFsXCI6XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJmb2N1c1wiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJjbGlja1wiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnRvZ2dsZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW50ZXJcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYXV0b1wiOiAvLyBpcyBob3ZlclxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbW9kZSAke21vZGV9YCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZVwiLCB7XG5cdFx0c2VsZixcblx0fSk7XG5cblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRkZW5cIiwge1xuXHRcdFx0c2VsZixcblx0XHR9KTtcblx0fSwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIFBvcHBlckJ1dHRvblxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoc2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXHR1cGRhdGVQb3BwZXIuY2FsbChzZWxmKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuZWRcIiwge1xuXHRcdFx0c2VsZixcblx0XHR9KTtcblx0fSwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbYXJyb3dFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YXJyb3ddYCxcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImJ1dHRvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+PC9zbG90PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBvcHBlcik7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7UG9wcGVyQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBQb3BwZXJCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHBvcHBlcmJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6ZmlsbC1hdmFpbGFibGV9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoZSBQb3BwZXJCdXR0b24gaXMgYSBidXR0b24gdGhhdCBvcGVucyBhIHBvcHBlciBlbGVtZW50LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcG9wcGVyLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbj48L21vbnN0ZXItcG9wcGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlckJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b25gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXItYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFBvcHBlclxuICogUG9wcGVyIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuY2xhc3MgUG9wcGVyQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIC0gVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiAtIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbGFiZWxzIC0gVGhlIGxhYmVscyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIC0gVGhlIGxhYmVsIGZvciB0aGUgYnV0dG9uLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgLSBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBleHRlbmRzIHtCdXR0b24uZGVmYXVsdHN9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b25cIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwiY2xpY2tcIixcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBvcHBlci1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goUG9wcGVyQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX1cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgc2VsZWN0aW9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogZS52YWx1ZT0xXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX0gdmFsdWVcblx0ICogQHNpbmNlIDEuMi4wXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyQnV0dG9uKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtDb25maXJtQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbmZpcm1CdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgY29uZmlybWJ1dHRvbiB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW4tYm90dG9tOjEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luLWJvdHRvbToxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWRlY2lzaW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bWFyZ2luOjFyZW0gMCAuNHJlbTt3aWR0aDoxMDAlfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7TWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG1lc3NhZ2VzdGF0ZWJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL21lc3NhZ2Utc3RhdGUtYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj48L21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBtZXNzYWdlLXN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAyLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc3RhdGUgYnV0dG9uIHdpdGggaWNvbnMgYW5kIGEgbWVzc2FnZVxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRyZW1vdmVTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5yZW1vdmVTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmdldFN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNldE1lc3NhZ2UobWVzc2FnZSwgdGl0bGUsIGljb24pIHtcblx0XHRpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcblx0XHRcdGlmIChtZXNzYWdlID09PSBcIlwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXNzYWdlIG11c3Qgbm90IGJlIGVtcHR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCB0aXRsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHR0aXRsZURpdi5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZVwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpY29uID0gdmFsaWRhdGVTdHJpbmcoaWNvbik7XG5cdFx0XHRcdGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LmlubmVySFRNTCA9IGljb247XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS1pY29uXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZChpY29uRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2VEaXYuaW5uZXJIVE1MID0gbWVzc2FnZTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aXRsZURpdik7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQobWVzc2FnZURpdik7XG5cblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIGNvbnRhaW5lckRpdik7XG5cdFx0fSBlbHNlIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIG1lc3NhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcIm1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0aGlkZU1lc3NhZ2UoKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkNvbmZpcm1CdXR0b259XG5cdCAqL1xuXHRzZXRDb25maXJtQnV0dG9uU3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGFuZCBzaG93IHRoZSBjb25maXJtIGJ1dHRvbiBtZXNzYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSB9O1xuXG4vKipcbiAqIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHBhc3NlZCB0byBhIGRhdGFzb3VyY2UgYW5kIGlzIHVzZWQgdG8gYWRhcHQgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxEYXRhU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9AQGRhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIGRhdGFzb3VyY2UgY2xhc3MgaXMgdGhlIGJhc2lzIGZvciBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGRhdGEgc291cmNlcy5cbiAqIEl0IHByb3ZpZGVzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBkYXRhXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHN1bW1hcnkgVGhlIGRhdGFzb3VyY2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBEYXRhc291cmNlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGVzIGEgbmV3IGRhdGFzb3VyY2Vcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cyksXG5cdFx0fSk7XG5cblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBhbmQgZXh0ZW5kIHRoaXMgbWV0aG9kIGFzIGZvbGxvd3MuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBnZXQgZGVmYXVsdHMoKSB7XG5cdCAqICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgbXlWYWx1ZTp0cnVlXG5cdCAqICAgIH0pO1xuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgb3B0aW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0c2V0T3B0aW9ucyhvcHRpb25zKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cdFx0ZXh0ZW5kKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHJlYWwgb2JqZWN0XG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdHxBcnJheX1cblx0ICovXG5cdGdldCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGRhdGFcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldChkYXRhKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLnNldFN1YmplY3QoZGF0YSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRpZiAoaXNTdHJpbmcoZGF0YSkpIHtcblx0XHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHtkYXRhfSkuYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vcGlwZS5tanNcIjtcblxuZXhwb3J0IHsgU2VydmVyIH07XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHNlcnZlciBkYXRhIHNvdXJjZXNcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlci5cblx0ICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHR0cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcInJlYWRcIiwgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBkYXRhUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5wYXRoXCIpO1xuXHRcdGlmIChkYXRhUGF0aCkge1xuXHRcdFx0cGF5bG9hZCA9IG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLmdldFZpYShkYXRhUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSBmb3Igd3JpdGluZyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblxuXHRcdGNvbnN0IHNoZWF0aGluZ09iamVjdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLm9iamVjdFwiKTtcblx0XHRjb25zdCBzaGVhdGhpbmdQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcucGF0aFwiKTtcblxuXHRcdGlmIChzaGVhdGhpbmdPYmplY3QgJiYgc2hlYXRoaW5nUGF0aCkge1xuXHRcdFx0Y29uc3Qgc3ViID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSBzaGVhdGhpbmdPYmplY3Q7XG5cdFx0XHRuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5zZXRWaWEoc2hlYXRoaW5nUGF0aCwgc3ViKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNhbGxiYWNrc1trZXldID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhrZXksIGNhbGxiYWNrc1trZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9iaiA9IHBpcGUucnVuKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXIuUmVzdEFQSVxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBXcml0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICogQHBhcmFtIHtPYmplY3R9IHZhbGlkYXRpb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB2YWxpZGF0aW9uKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0XHR2YWxpZGF0aW9uOiB2YWxpZGF0aW9uLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFGZXRjaEVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40My4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlci5SZXN0QVBJXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIERhdGFGZXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcbmltcG9ydCB7IFdyaXRlRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL3dyaXRlZXJyb3IubWpzXCI7XG5pbXBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9IGZyb20gXCIuL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanNcIjtcblxuZXhwb3J0IHsgUmVzdEFQSSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3RlclxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXJcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGlcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQ9e30gQW4gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuIFRoZSBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0fFJlcXVlc3QgY29uc3RydWN0b3J9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5pbml0Lm1ldGhvZD1QT1NUXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0LmhlYWRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBoZWFkZXJzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5yZXNwb25zZUNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmFjY2VwdGVkU3RhdHVzPVsyMDAsMjAxXVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucmVwb3J0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5yZXBvcnQucGF0aCBQYXRoIHRvIHZhbGlkYXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVhZC5pbml0Lm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuYWNjZXB0ZWRTdGF0dXM9WzIwMF1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwLCAyMDFdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwb3J0OiB7XG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0aW5pdDoge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMF0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLmluaXRcIik7XG5cdFx0aWYgKCFpc09iamVjdChpbml0KSkgaW5pdCA9IHt9O1xuXHRcdGlmICghaW5pdFtcIm1ldGhvZFwiXSkgaW5pdFtcIm1ldGhvZFwiXSA9IFwiR0VUXCI7XG5cblx0XHRsZXQgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcInJlYWQucmVzcG9uc2VDYWxsYmFja1wiKTtcblx0XHRpZiAoIWNhbGxiYWNrKVxuXHRcdFx0Y2FsbGJhY2sgPSAob2JqKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0KHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaikpO1xuXHRcdFx0fTtcblxuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcInJlYWRcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge1dyaXRlRXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRsZXQgaW5pdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKHR5cGVvZiBpbml0W1wiaGVhZGVyc1wiXSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0aW5pdFtcImhlYWRlcnNcIl0gPSB7XG5cdFx0XHRcdFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJQT1NUXCI7XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdGluaXRbXCJib2R5XCJdID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcIndyaXRlXCIsIGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXN0QVBJKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ucmVhZCxcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLndyaXRlLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGluaXRcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKGluaXQsIGtleSwgY2FsbGJhY2spIHtcblx0bGV0IHJlc3BvbnNlO1xuXG5cdHJldHVybiBmZXRjaCh0aGlzLmdldE9wdGlvbihgJHtrZXl9LnVybGApLCBpbml0KVxuXHRcdC50aGVuKChyZXNwKSA9PiB7XG5cdFx0XHRyZXNwb25zZSA9IHJlc3A7XG5cblx0XHRcdGNvbnN0IGFjY2VwdGVkU3RhdHVzID0gdGhpcy5nZXRPcHRpb24oYCR7a2V5fS5hY2NlcHRlZFN0YXR1c2AsIFsyMDBdKTtcblxuXHRcdFx0aWYgKGFjY2VwdGVkU3RhdHVzLmluZGV4T2YocmVzcC5zdGF0dXMpID09PSAtMSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZhYmxlIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIGBRdWV1ZS5hZGQoKWAgYW5kIGBRdWV1ZS5jbGVhcigpYCBub3RpZnkgYWxsIG9ic2VydmVycy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcXVldWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBbiBvYnNlcnZhYmxlIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBPYnNlcnZhYmxlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdG9ic2VydmVyczogbmV3IE9ic2VydmVyTGlzdCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbmNvbnN0IGRhdGFTeW1ib2wgPSBTeW1ib2woXCJAQGRhdGFcIik7XG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5OZXQuV2ViU29ja2V0XG4gKiBAc3VtbWFyeSBUaGUgTWVzc2FnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRhdGEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZGF0YVN5bWJvbF0gPSB2YWxpZGF0ZU9iamVjdChkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByYXcgbWVzc2FnZS5cblx0ICpcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGpzb25cblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzdGF0aWMgZnJvbUpTT04oanNvbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGpzb24pO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShKU09OLnBhcnNlKGpzb24pKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyLCBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVjZWl2ZVF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicmVjZWl2ZVF1ZXVlXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2VuZFF1ZXVlU3ltYm9sID0gU3ltYm9sKFwic2VuZFF1ZXVlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCBjb25uZWN0aW9uU3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFudWFsQ2xvc2VTeW1ib2wgPSBTeW1ib2woXCJtYW51YWxDbG9zZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TdGF0dXNDb2RlID0ge1xuXHQxMDAwOiBcIk5vcm1hbCBjbG9zdXJlXCIsXG5cdDEwMDE6IFwiR29pbmcgYXdheVwiLFxuXHQxMDAyOiBcIlByb3RvY29sIGVycm9yXCIsXG5cdDEwMDM6IFwiVW5zdXBwb3J0ZWQgZGF0YVwiLFxuXHQxMDA0OiBcIlJlc2VydmVkXCIsXG5cdDEwMDU6IFwiTm8gc3RhdHVzIGNvZGVcIixcblx0MTAwNjogXCJDb25uZWN0aW9uIGNsb3NlZCBhYm5vcm1hbGx5XCIsXG5cdDEwMDc6IFwiSW52YWxpZCBmcmFtZSBwYXlsb2FkIGRhdGFcIixcblx0MTAwODogXCJQb2xpY3kgdmlvbGF0aW9uXCIsXG5cdDEwMDk6IFwiTWVzc2FnZSB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYmNvbm5lY3QuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBwcm9taXNlQWxscmVkeVJlc29sdmVkID0gZmFsc2U7XG5cblx0bGV0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKGNvbm5lY3Rpb25UaW1lb3V0KSB8fCBjb25uZWN0aW9uVGltZW91dCA8IDEwMCkge1xuXHRcdGNvbm5lY3Rpb25UaW1lb3V0ID0gNTAwMDtcblx0fVxuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHRpbWVvdXRcIikpO1xuXHR9LCBjb25uZWN0aW9uVGltZW91dCk7XG5cblx0bGV0IHJlY29ubmVjdFRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdFRpbWVvdXQpIHx8IHJlY29ubmVjdFRpbWVvdXQgPCAxMDAwKVxuXHRcdHJlY29ubmVjdFRpbWVvdXQgPSAxMDAwO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RBdHRlbXB0cykgfHwgcmVjb25uZWN0QXR0ZW1wdHMgPCAxKVxuXHRcdHJlY29ubmVjdEF0dGVtcHRzID0gMTtcblx0bGV0IHJlY29ubmVjdEVuYWJsZWQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWRcIik7XG5cdGlmIChyZWNvbm5lY3RFbmFibGVkICE9PSB0cnVlKSByZWNvbm5lY3RFbmFibGVkID0gZmFsc2U7XG5cblx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKys7XG5cblx0aWYgKFxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ICYmXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQucmVhZHlTdGF0ZSA8IDJcblx0KSB7XG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UoKTtcblx0fVxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwpO1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQobmV3IE1lc3NhZ2UocmVhZGVyLnJlc3VsdCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZWFkZXIucmVhZEFzVGV4dChuZXcgTWVzc2FnZShldmVudC5kYXRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQoTWVzc2FnZS5mcm9tSlNPTihldmVudC5kYXRhKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdGlmICh0eXBlb2YgcmVzb2x2ZSA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRwcm9taXNlQWxscmVkeVJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoc2VsZlttYW51YWxDbG9zZVN5bWJvbF0pIHtcblx0XHRcdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvbmV0L3dlYmNvbm5lY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLk5ldFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29ubmVjdFNlcnZlci5jYWxsKHRoaXMsIHJlc29sdmUsIHJlamVjdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tjb25uZWN0aW9uU3ltYm9sXT8uc29ja2V0Py5yZWFkeVN0YXRlID09PSAxO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcblx0ICovXG5cdGNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbikge1xuXHRcdGlmICghaXNJbnRlZ2VyKHN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPCAxMDAwIHx8IHN0YXR1c0NvZGUgPiA0OTk5KSB7XG5cdFx0XHRzdGF0dXNDb2RlID0gMTAwMDtcblx0XHR9XG5cdFx0aWYgKCFpc1N0cmluZyhyZWFzb24pKSB7XG5cdFx0XHRyZWFzb24gPSBcIlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCkge1xuXHRcdFx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUG9sbHMgdGhlIHJlY2VpdmUgcXVldWUgZm9yIG5ldyBtZXNzYWdlcy5cblx0ICpcblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0ucG9sbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFyZSB0aGVyZSBhbnkgbWVzc2FnZXMgaW4gdGhlIHJlY2VpdmUgcXVldWU/XG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wZWVrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlfE9iamVjdH0gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0c2VuZChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlICE9PSAxKSB7XG5cdFx0XHRcdHJlamVjdChcInRoZSBzb2NrZXQgaXMgbm90IHJlYWR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFdlYkNvbm5lY3QgYXMgTmV0V2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqXG4gKiBoaW50OiB0aGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUgdGVzdHMuIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBpdCwgcGxlYXNlIGNoYW5nZSBpdCBpbiB0aGUgdGVzdHMgYXMgd2VsbC5cbiAqL1xuY29uc3Qgd2ViQ29ubmVjdFN5bWJvbCA9IFN5bWJvbChcImNvbm5lY3Rpb25cIik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlclxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfTtcblx0XHR9XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSBvcHRpb25zID0ge307XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0gPSBuZXcgTmV0V2ViQ29ubmVjdCh7XG5cdFx0XHR1cmw6IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpLFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKSxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNvbm5lY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQucGF0aCBQYXRoIHRvIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5kYXRhUmVjZWl2ZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRsZXQgb2JqID0gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5wb2xsKCk7XG5cdFx0XHRcdGlmICghaXNPYmplY3Qob2JqKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYW4gb2JqZWN0LlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEob2JqIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGEgTWVzc2FnZS5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iaiA9IG9iai5nZXREYXRhKCk7XG5cdFx0XHRcdG9iaiA9IHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaik7XG5cdFx0XHRcdHRoaXMuc2V0KG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUodGhpcy5nZXQoKSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uc2VuZChvYmopO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFdlYkNvbm5lY3QodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7ZXh0ZXJuYWw6bG9jYWxTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJsb2NhbFN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGNsb25lXG5cdCAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxTdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBTZXNzaW9uU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpzZXNzaW9uU3RvcmFnZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KFwic2Vzc2lvblN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIENsb25lXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Nlc3Npb25TdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7Rm9ybVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGZvcm0geyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci