dmencu 3.3.1 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ayuda/asignacion.md +16 -0
- package/ayuda/circuito-encuesta.md +27 -0
- package/ayuda/control.md +13 -0
- package/ayuda/dm-cambiar-modo.md +16 -0
- package/ayuda/dm-relevamiento.md +20 -0
- package/ayuda/dm-sincronizar.md +18 -0
- package/ayuda/fin-de-campo.md +14 -0
- package/ayuda/metadatos.md +14 -0
- package/ayuda/muestra.md +14 -0
- package/ayuda/procesar.md +13 -0
- package/ayuda/recepcion.md +20 -0
- package/ayuda/supervision.md +9 -0
- package/ayuda/usuarios.md +12 -0
- package/ayuda/varios.md +23 -0
- package/dist/client/client/client.js +99 -2
- package/dist/client/client/css/menu.styl +29 -0
- package/dist/client/unlogged/css/formulario-react.styl +9 -0
- package/dist/client/unlogged/render-config.d.ts +5 -1
- package/dist/client/unlogged/render-config.js +14 -1
- package/dist/client/unlogged/render-formulario.d.ts +1 -0
- package/dist/client/unlogged/render-formulario.js +43 -2
- package/dist/client/unlogged/render-formulario.tsx +71 -0
- package/dist/client/unlogged/render-general.d.ts +2 -0
- package/dist/client/unlogged/render-general.js +2 -1
- package/dist/client/unlogged/render-general.tsx +1 -0
- package/dist/client/unlogged/render-init.d.ts +1 -0
- package/dist/client/unlogged/render-init.js +9 -2
- package/dist/client/unlogged/tipos.d.ts +19 -1
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/app-dmencu.d.ts +8 -1
- package/dist/server/app-dmencu.js +42 -2
- package/dist/server/ayuda.d.ts +19 -0
- package/dist/server/ayuda.js +224 -0
- package/dist/server/def-config.d.ts +1 -1
- package/dist/server/def-config.js +2 -1
- package/dist/server/procedures-dmencu.js +20 -2
- package/dist/server/server/app-dmencu.d.ts +8 -1
- package/dist/server/server/app-dmencu.js +42 -2
- package/dist/server/server/ayuda.d.ts +19 -0
- package/dist/server/server/ayuda.js +224 -0
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +2 -1
- package/dist/server/server/procedures-dmencu.js +18 -2
- package/dist/server/server/table-tem.d.ts +1 -0
- package/dist/server/server/table-tem.js +25 -21
- package/dist/server/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/server/table-tem_edicion.js +62 -0
- package/dist/server/server/types-dmencu.d.ts +20 -1
- package/dist/server/server/types-dmencu.js +1 -1
- package/dist/server/table-tem.d.ts +1 -0
- package/dist/server/table-tem.js +25 -21
- package/dist/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/table-tem_edicion.js +62 -0
- package/dist/server/types-dmencu.d.ts +20 -1
- package/dist/server/types-dmencu.js +1 -1
- package/dist/server/unlogged/tipos.d.ts +19 -1
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/test/app-para-tests.d.ts +11 -8
- package/dist/test/app-para-tests.js +8 -2
- package/dist/test/test-ayuda.d.ts +1 -0
- package/dist/test/test-ayuda.js +183 -0
- package/dist/test/test-tem-edicion.d.ts +1 -0
- package/dist/test/test-tem-edicion.js +103 -0
- package/dist/test/test.d.ts +2 -0
- package/dist/test/test.js +4 -2
- package/dist/unlogged/tipos.d.ts +19 -1
- package/dist/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/css/formulario-react.styl +9 -0
- package/dist/unlogged/unlogged/render-config.d.ts +5 -1
- package/dist/unlogged/unlogged/render-config.js +14 -1
- package/dist/unlogged/unlogged/render-formulario.d.ts +1 -0
- package/dist/unlogged/unlogged/render-formulario.js +43 -2
- package/dist/unlogged/unlogged/render-formulario.tsx +71 -0
- package/dist/unlogged/unlogged/render-general.d.ts +2 -0
- package/dist/unlogged/unlogged/render-general.js +2 -1
- package/dist/unlogged/unlogged/render-general.tsx +1 -0
- package/dist/unlogged/unlogged/render-init.d.ts +1 -0
- package/dist/unlogged/unlogged/render-init.js +9 -2
- package/dist/unlogged/unlogged/tipos.d.ts +19 -1
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/unlogged.js +14 -1
- package/install/validar_manzana_casa_tem_trg.sql +25 -0
- package/package.json +5 -2
|
@@ -43,6 +43,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
43
43
|
exports.UsuarioLogueadoYConfig = UsuarioLogueadoYConfig;
|
|
44
44
|
exports.LayoutAccionDispositivo = LayoutAccionDispositivo;
|
|
45
45
|
exports.PantallaSincronizacion = PantallaSincronizacion;
|
|
46
|
+
exports.PantallaAyuda = PantallaAyuda;
|
|
46
47
|
exports.PantallaCambioModo = PantallaCambioModo;
|
|
47
48
|
exports.InfoVersionSincroDespliegue = InfoVersionSincroDespliegue;
|
|
48
49
|
exports.ListaTextos = ListaTextos;
|
|
@@ -1833,6 +1834,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1833
1834
|
props.children));
|
|
1834
1835
|
}
|
|
1835
1836
|
function BotoneraNavegacion(props) {
|
|
1837
|
+
var _a;
|
|
1836
1838
|
const dispatch = (0, react_redux_1.useDispatch)();
|
|
1837
1839
|
const { pantallaActual } = (0, react_redux_1.useSelector)((state) => state.opciones);
|
|
1838
1840
|
return (React.createElement(material_1.ButtonGroup, { variant: "outlined", size: "small", color: "inherit" },
|
|
@@ -1841,7 +1843,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1841
1843
|
" Hoja de Ruta"),
|
|
1842
1844
|
React.createElement(exports.Button, { onClick: () => dispatch(redux_formulario_1.dispatchers.SET_OPCION({ opcion: 'pantallaActual', valor: 'sincronizacion' })), disabled: pantallaActual === 'sincronizacion' || props.disabled, style: pantallaActual === 'sincronizacion' ? { backgroundColor: 'rgba(255,255,255,0.1)' } : undefined },
|
|
1843
1845
|
React.createElement(render_general_1.ICON.CloudSync, null),
|
|
1844
|
-
" Sincronizaci\u00F3n")
|
|
1846
|
+
" Sincronizaci\u00F3n"),
|
|
1847
|
+
((_a = (0, render_config_1.getFormRenderer)().leerAyuda()) === null || _a === void 0 ? void 0 : _a.temas.length) ? (React.createElement(exports.Button, { onClick: () => dispatch(redux_formulario_1.dispatchers.SET_OPCION({ opcion: 'pantallaActual', valor: 'ayuda' })), disabled: pantallaActual === 'ayuda' || props.disabled, style: pantallaActual === 'ayuda' ? { backgroundColor: 'rgba(255,255,255,0.1)' } : undefined },
|
|
1848
|
+
React.createElement(render_general_1.ICON.HelpOutline, null),
|
|
1849
|
+
" Ayuda")) : null));
|
|
1845
1850
|
}
|
|
1846
1851
|
function UsuarioLogueadoYConfig(props) {
|
|
1847
1852
|
var username = (0, render_config_1.getFormRenderer)().getUsernameLogueado();
|
|
@@ -1994,6 +1999,39 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1994
1999
|
React.createElement(render_general_1.ICON.CloudSync, null),
|
|
1995
2000
|
" Sincronizar"), colorBotonAccion: modoDM === 'capa' ? 'success' : 'primary', onAccion: handleSincronizar, mensajeVacio: props.requerida ? " " : "No hay información de formularios localmente." }));
|
|
1996
2001
|
}
|
|
2002
|
+
// ayuda en línea guardada en la última sincronización: funciona sin conexión (ver docs/ayuda-online.md)
|
|
2003
|
+
function PantallaAyuda() {
|
|
2004
|
+
var _a, _b;
|
|
2005
|
+
const modoDM = (0, render_config_1.getFormRenderer)().getModoDM();
|
|
2006
|
+
const temas = (_b = (_a = (0, render_config_1.getFormRenderer)().leerAyuda()) === null || _a === void 0 ? void 0 : _a.temas) !== null && _b !== void 0 ? _b : [];
|
|
2007
|
+
const [idTema, setIdTema] = (0, react_1.useState)(temas.length ? temas[0].id : null);
|
|
2008
|
+
(0, react_1.useEffect)(() => {
|
|
2009
|
+
(0, render_general_1.scrollToTop)();
|
|
2010
|
+
}, [idTema]);
|
|
2011
|
+
const tema = temas.find(tema => tema.id == idTema);
|
|
2012
|
+
// los enlaces "ayuda:id" llevan a otro tema; los demás se abren aparte para no salir de la aplicación
|
|
2013
|
+
const onClickContenido = (event) => {
|
|
2014
|
+
const enlace = event.target instanceof Element ? event.target.closest('a') : null;
|
|
2015
|
+
const destino = enlace === null || enlace === void 0 ? void 0 : enlace.getAttribute('href');
|
|
2016
|
+
if (destino != null) {
|
|
2017
|
+
event.preventDefault();
|
|
2018
|
+
if (destino.startsWith('ayuda:')) {
|
|
2019
|
+
setIdTema(destino.slice('ayuda:'.length));
|
|
2020
|
+
}
|
|
2021
|
+
else {
|
|
2022
|
+
window.open(destino, '_blank');
|
|
2023
|
+
}
|
|
2024
|
+
}
|
|
2025
|
+
};
|
|
2026
|
+
return (React.createElement(React.Fragment, null,
|
|
2027
|
+
React.createElement(AppBarPrincipal, { modoDM: modoDM, titulo: "AYUDA" }),
|
|
2028
|
+
React.createElement("div", { className: "hoja-de-ruta" },
|
|
2029
|
+
React.createElement(material_1.Paper, { style: { padding: '20px', margin: 'auto', marginBottom: '10px' } }, temas.length == 0 ? (React.createElement(Typography, null, "La ayuda se descarga al sincronizar el dispositivo.")) : (React.createElement(React.Fragment, null,
|
|
2030
|
+
React.createElement("div", { style: { display: 'flex', flexWrap: 'wrap', gap: '8px', marginBottom: '16px' } }, temas.map(tema => React.createElement(exports.Button, { key: tema.id, size: "small", variant: tema.id == idTema ? 'contained' : 'outlined', onClick: () => setIdTema(tema.id) }, tema.titulo))),
|
|
2031
|
+
tema ? (React.createElement(React.Fragment, null,
|
|
2032
|
+
React.createElement(Typography, { variant: "h5" }, tema.titulo),
|
|
2033
|
+
React.createElement("div", { className: "ayuda-contenido", onClick: onClickContenido, dangerouslySetInnerHTML: { __html: tema.html } }))) : null))))));
|
|
2034
|
+
}
|
|
1997
2035
|
function PantallaCambioModo() {
|
|
1998
2036
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
1999
2037
|
const [aviso, setAviso] = (0, react_1.useState)(null);
|
|
@@ -2146,6 +2184,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
2146
2184
|
else if (pantallaActual === 'modo') {
|
|
2147
2185
|
return React.createElement(PantallaCambioModo, null);
|
|
2148
2186
|
}
|
|
2187
|
+
else if (pantallaActual === 'ayuda') {
|
|
2188
|
+
return React.createElement(PantallaAyuda, null);
|
|
2189
|
+
}
|
|
2149
2190
|
return React.createElement(exports.HojaDeRutaDespliegue, null);
|
|
2150
2191
|
}
|
|
2151
2192
|
else {
|
|
@@ -2394,4 +2435,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
2394
2435
|
});
|
|
2395
2436
|
});
|
|
2396
2437
|
//FIN CONTROL PESTAÑAS ABIERTAS
|
|
2397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBeUtBLDhEQUVDO0lBdUpELGdGQXdCQztJQThKRCw4QkE2QkM7SUErdURELDRCQUtDO0lBa01ELG9EQVNDO0lBUUQsa0VBRUM7SUFFRCxvR0F3RUM7SUFFRCxvQ0FlQztJQWVELDBDQXFCQztJQUVELGdEQTBCQztJQUVELHdEQThHQztJQXVCRCwwREFvRkM7SUFRRCx3REF5REM7SUFFRCxnREFvR0M7SUFLRCxrRUFXQztJQWtDRCxrQ0FJQztJQVVELGdDQWNDO0lBRUQsOEJBcUNDO0lBRUQsOERBa0JDO0lBcG9HRCwrQkFBK0I7SUFDL0Isc0NBQXNDO0lBQ3RDLHFEQVcwQjtJQUMxQiw2REFROEI7SUEwU3JCLDhGQTNTTCxrQ0FBYSxPQTJTSztJQXpTdEIsbUNBbUJpQjtJQUNqQiwyREFxQjRCO0lBQzVCLHlEQUs0QjtJQUM1QixpQ0FBcUQ7SUFDckQsNkNBQXFFO0lBQ3JFLHFDQUEyQztJQUMzQywrQ0FBeUQ7SUFDekQsMkNBQXdDO0lBRXhDLDRDQVN1QjtJQUd2QiwyREFlNEI7SUFFNUIsMkNBQTJDO0lBQzNDLG1EQUFzRjtJQUV0RixpRUFBaUU7SUFDakUsd0VBQXdFO0lBQ3hFLElBQUEsb0NBQW9CLEVBQUMsU0FBZSwrQkFBK0I7O1lBQy9ELElBQUksWUFBWSxHQUFHLElBQUEsK0JBQWUsR0FBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdDLElBQUcsVUFBVSxJQUFJLEtBQUssRUFBQyxDQUFDO2dCQUNwQixJQUFBLGlDQUFhLEVB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N0MsQ0FBQztZQUNELGNBQWMsQ0FBQyxjQUFjLEdBQUcsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUYsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFDRixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksWUFBWSxHQUFHO1lBQ2YsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ2pELHdCQUF3QjtJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtRQUM1QixZQUFZLEVBQUUsQ0FBQTtJQUNsQixDQUFDLENBQUMsQ0FBQTs7QUFFRiwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQge1xyXG4gICAgUmVuZGVyUHJpbmNpcGFsLFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLFxyXG4gICAgdXNlT25saW5lU3RhdHVzLFxyXG4gICAgUmVuZGVyaXphZG9ySlNPTixcclxuICAgIGZlY2hhUmVmZXJlbmNpYSxcclxuICAgIG1lc1JlZmVyZW5jaWEsXHJcbiAgICBvYnRlbmVyVGV4dG9QYXJlbnRlc2NvLFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBSRUdFWF9TUExJVF9DT01PRElORVMsXHJcbiAgICBJU19URU1fUEFUVEVSTixcclxuICAgIElTX1ZBUklBQkxFX0hBU0hfUEFUVEVSTixcclxuICAgIElTX0NPTU9ESU5fUkVEVVhfUEFUVEVSTixcclxuICAgIGV4dHJhZXJDb21vZGluZXNSZWR1eCxcclxuICAgIGV4dHJhZXJWYXJpYWJsZXNJbnRlcmVzLFxyXG4gICAgZ2V0QkZWYXJOYW1lcyxcclxufSBmcm9tIFwiLi9oZWxwZXJzLWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHtcclxuICAgIEJsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLFxyXG4gICAgRXN0YWRvQ2FyZ2EsIEZpbHRybywgRm9yUGssIEZvclBrUmFpeiwgRm9ybXVsYXJpbyxcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsXHJcbiAgICBSZXNwdWVzdGFzLCBSZXNwdWVzdGFMYXNVQSwgUmVzcHVlc3Rhc1JhaXosIFZhbG9yLCBURU0sIElkQ2FyZ2EsIENhcmdhLCBJZEZpbiwgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkQ2FzaWxsZXJvLFxyXG4gICAgUHJlZ3VudGFDb25TaU5vLFxyXG4gICAgVGV4dG8sIEVzdHJ1Y3R1cmEsIEluZm9ybWFjaW9uSGRyLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSxcclxuICAgIGl0ZXJhdG9yLCBlbXB0eSwgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyxcclxuICAgIFBNYXRyaXosXHJcbiAgICBNb2RvRE0sXHJcbiAgICBJZENvbW9kaW4sXHJcbiAgICBJZFNlbWFuYSxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXosXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICByZXNwdWVzdGFzRm9yUGssXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlcyxcclxuICAgIHNldERhdG9zQnlQYXNzLFxyXG4gICAgc2V0RXN0cnVjdHVyYSxcclxuICAgIHNldENhbGN1bGFyQ29tb2RpbmVzLFxyXG4gICAgc3VzY3JpYmlyQ2FtYmlvVmFyaWFibGUsXHJcbiAgICBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlLFxyXG4gICAgZ2V0UmVzdW1lbkVzdGFkb0ZvclRhcmVhXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge1xyXG4gICAgY29tb2RpbmVzSW5pY2lhbGVzLFxyXG4gICAgY3JlYXJTdG9yZUZvcm11bGFyaW8sIGRpc3BhdGNoZXJzLFxyXG4gICAgZ2V0U3RvcmVGb3JtdWxhcmlvLFxyXG4gICAgZ290b0NvbnNpc3RpcixcclxufSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoLCBzaGFsbG93RXF1YWwgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7IHNsZWVwLCBjb2FsZXNjZSwgZGF0ZXRpbWUgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENoZWNrYm94LFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCxcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsXHJcbiAgICBJY29uLFxyXG4gICAgTGlzdEl0ZW1JY29uLFxyXG4gICAgTGlzdEl0ZW1UZXh0LFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLFxyXG4gICAgZ2V0RXN0cnVjdHVyYSxcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhcyxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQgeyBodG1sLCBIdG1sVGFnIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgRm9ybVJlbmRlcmVyLCBnZXRGb3JtUmVuZGVyZXIsIHJlZ2lzdHJhckNhcmdhck1vdG9yIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5cclxuLy8gUmVnaXN0cmEgbGEgaW1wbGVtZW50YWNpw7NuIGRlIGNhcmdhck1vdG9yIGFsIGNhcmdhciBlbCBtw7NkdWxvLlxyXG4vLyBFc3RvIGV2aXRhIGxhIGRlcGVuZGVuY2lhIGNpcmN1bGFyIHJlbmRlci1jb25maWcg4oaQIGJ5cGFzcy1mb3JtdWxhcmlvLlxyXG5yZWdpc3RyYXJDYXJnYXJNb3Rvcihhc3luYyBmdW5jdGlvbiBjYXJnYXJFc3RydWN0dXJhWURhdG9zRW5NZW1vcmlhKCkge1xyXG4gICAgdmFyIGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICBpZihlc3RydWN0dXJhICYmIGRhdG9zKXtcclxuICAgICAgICBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIHNldERhdG9zQnlQYXNzKGRhdG9zKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZXhwb3J0IHR5cGUgUmVzdWx0YWRvUGF0aDxUID0gdW5rbm93bj4gPSB7XHJcbiAgICBlbmNvbnRyYWRvOiBib29sZWFuO1xyXG4gICAgdmFsb3I6IFQgfCBudWxsO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gb2J0ZW5lclBvclBhdGg8VCA9IHVua25vd24+KG9iamV0bzogUmVjb3JkPHN0cmluZywgYW55PiwgcGF0aDogc3RyaW5nKTogUmVzdWx0YWRvUGF0aDxUPiB7XHJcbiAgICBjb25zdCBub0VuY29udHJhZG86IFJlc3VsdGFkb1BhdGg8VD4gPSB7IGVuY29udHJhZG86IGZhbHNlLCB2YWxvcjogbnVsbCB9O1xyXG5cclxuICAgIGlmICghb2JqZXRvIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyB8fCBwYXRoLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgICByZXR1cm4gbm9FbmNvbnRyYWRvO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNsYXZlcyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgIGxldCBhY3R1YWw6IGFueSA9IG9iamV0bztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXZlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNsYXZlID0gY2xhdmVzW2ldO1xyXG5cclxuICAgICAgICAvLyBTaSBlbCBuaXZlbCBhY3R1YWwgbm8gZXMgdW4gb2JqZXRvL2FycmF5IG8gbGEgY2xhdmUgTk8gZXhpc3RlIGVuIMOpbFxyXG4gICAgICAgIGlmIChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcgfHwgIShjbGF2ZSBpbiBhY3R1YWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub0VuY29udHJhZG87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhY3R1YWwgPSBhY3R1YWxbY2xhdmVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW5jb250cmFkbzogdHJ1ZSxcclxuICAgICAgICB2YWxvcjogKGFjdHVhbCA/PyBudWxsKSBhcyBUIHwgbnVsbCxcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IE5PX0NBUkdBRE9fQVVOID0gJy4uLi4uLi4uJztcclxuY29uc3QgU0lOX1ZBTE9SX0VOX09CSkVUT19URU0gPSAnJztcclxuXHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsLCBkaWNjaW9uYXJpbz86IHsgW2NsYXZlOiBzdHJpbmddOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xyXG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvL2csIFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csICcvJDEnKTtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fXyovZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKS5yZXBsYWNlKC9AKD86Iz9bXFx3LV0rfFxcJFt0VF1bZUVdW21NXVteQF0qKUAvZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKTtcclxuICAgIGlmICghZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdGVhclJlc3VsdGFkb0NvbW9kaW4odmFsb3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYFske3ZhbG9yfV1gO1xyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gMS4gSEVMUEVSUyBQVVJPUyBZIEVYUFJFU0lPTkVTIFJFR1VMQVJFU1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vIChkZWZpbmlkb3MgZW4gaGVscGVycy1mb3JtdWxhcmlvLnRzIHBhcmEgcG9kZXIgdGVzdGVhcmxvcyBzaW4gUmVhY3QpXHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gMi4gSE9PSyBQRVJTT05BTElaQURPIFBBUkEgQklORElORyBESU7DgU1JQ09cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5mdW5jdGlvbiB1c2VWYXJpYWJsZXNFc2N1Y2hhZGFzKHRleHQ6IHN0cmluZywgZm9yUGs6IEZvclBrKSB7XHJcbiAgICBjb25zdCB2YXJpYWJsZXNJbnRlcmVzID0gdXNlTWVtbygoKSA9PiBleHRyYWVyVmFyaWFibGVzSW50ZXJlcyh0ZXh0KSwgW3RleHRdKTtcclxuXHJcbiAgICAvLyBFc3RhZG8gbG9jYWwgY29uIGxvcyB2YWxvcmVzIHJlYWxlcyBwYXJhIHF1ZSBSZWFjdCBzb2xvIHJlLXJlbmRlcmljZSBzaSBlbCBzdHJpbmcgQ0FNQklBXHJcbiAgICBjb25zdCBbbWFwYVZhcmlhYmxlcywgc2V0TWFwYVZhcmlhYmxlc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PlxyXG4gICAgICAgIG9idGVuZXJWYWxvcmVzQWN0dWFsZXModmFyaWFibGVzSW50ZXJlcywgZm9yUGspXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFNpbmNyb25pemFtb3MgY3VhbmRvIGNhbWJpYW4gdmFyaWFibGVzSW50ZXJlcyBvIGZvclBrXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNldE1hcGFWYXJpYWJsZXMob2J0ZW5lclZhbG9yZXNBY3R1YWxlcyh2YXJpYWJsZXNJbnRlcmVzLCBmb3JQaykpO1xyXG4gICAgfSwgW3ZhcmlhYmxlc0ludGVyZXMsIGZvclBrXSk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmFyaWFibGVzSW50ZXJlcy5sZW5ndGggPT09IDAgfHwgIWZvclBrKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlID0gKHZhck1vZGlmaWNhZGEsIF9udWV2b1ZhbG9yLCBfZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltcGFjdGFWYXJpYWJsZSA9IHZhcmlhYmxlc0ludGVyZXMuaW5jbHVkZXModmFyTW9kaWZpY2FkYSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltcGFjdGFSZXNwdWVzdGFzID0gcmVzcHVlc3Rhc0F1bWVudGFkYXMgJiYgdmFyaWFibGVzSW50ZXJlcy5zb21lKHYgPT4gdiBpbiByZXNwdWVzdGFzQXVtZW50YWRhcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWltcGFjdGFWYXJpYWJsZSAmJiAhaW1wYWN0YVJlc3B1ZXN0YXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIExlZW1vcyBlbCBudWV2byBlc3RhZG8gZGUgbGEgZnVlbnRlIGRlIHZlcmRhZFxyXG4gICAgICAgICAgICBjb25zdCBudWV2b3NWYWxvcmVzID0gb2J0ZW5lclZhbG9yZXNBY3R1YWxlcyh2YXJpYWJsZXNJbnRlcmVzLCBmb3JQayk7XHJcblxyXG4gICAgICAgICAgICBzZXRNYXBhVmFyaWFibGVzKHByZXYgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyYW1vcyB2YWxvciBwb3IgdmFsb3Igc2kgcmVhbG1lbnRlIGNhbWJpw7MgYWxnbyB2aXNpYmxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBodWJvQ2FtYmlvID0gdmFyaWFibGVzSW50ZXJlcy5zb21lKHYgPT4gcHJldlt2XSAhPT0gbnVldm9zVmFsb3Jlc1t2XSk7XHJcbiAgICAgICAgICAgICAgICAvLyBTaSBOTyBodWJvIGNhbWJpbyByZWFsLCBkZXZvbHZlbW9zICdwcmV2JyAobWlzbWEgcmVmZXJlbmNpYSkgeSBSZWFjdCBDQU5DRUxBIGVsIHJlLXJlbmRlclxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGh1Ym9DYW1iaW8gPyBudWV2b3NWYWxvcmVzIDogcHJldjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVzdXNjcmliaXIgPSBzdXNjcmliaXJDYW1iaW9WYXJpYWJsZShsaXN0ZW5lciwgdmFyaWFibGVzSW50ZXJlcyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IGRlc3VzY3JpYmlyKCk7XHJcbiAgICB9LCBbdmFyaWFibGVzSW50ZXJlcywgZm9yUGtdKTtcclxuXHJcbiAgICAvLyBHZXR0ZXIgZXhwdWVzdG8gcGFyYSBtYW50ZW5lciB0dSBzaW50YXhpc1xyXG4gICAgcmV0dXJuIChub21icmVWYXI6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG1hcGFWYXJpYWJsZXNbbm9tYnJlVmFyXSA/PyBOT19DQVJHQURPX0FVTjtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9idGVuZXJWYWxvcmVzQWN0dWFsZXModmFyaWFibGVzOiBzdHJpbmdbXSwgZm9yUGs6IEZvclBrKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICBjb25zdCBtYXBhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG1hcGE7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgZm9yIChjb25zdCB2IG9mIHZhcmlhYmxlcykge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPy5bdiBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICBtYXBhW3ZdID0gU3RyaW5nKHZhbCA/PyBOT19DQVJHQURPX0FVTik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWFwYTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEJyZWFrZWFibGVUZXh0ID0gUmVhY3QubWVtbyhmdW5jdGlvbiBCcmVha2VhYmxlVGV4dChwcm9wczoge1xyXG4gICAgdGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZztcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcclxuICAgIGZvclBrPzogRm9yUGs7XHJcbn0pIHtcclxuICAgIGNvbnN0IHsgdGV4dCwgY2xhc3NOYW1lLCBzdHlsZSB9ID0gcHJvcHM7XHJcblxyXG4gICAgLy8gMS4gRWFybHkgUmV0dXJuXHJcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyAyLiBFeHRyYWNjacOzbiBkZSBkZXBlbmRlbmNpYXMgUmVkdXggKGRlc3B1w6lzIGRlIGxhIGd1YXJkYSlcclxuICAgIGNvbnN0IHJlZHV4Rm9yUGsgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGU/Lm9wY2lvbmVzPy5mb3JQayk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrIHx8IHJlZHV4Rm9yUGs7XHJcblxyXG4gICAgLy8gLS0tIEEuIFN1c2NyaXBjacOzbiBSZWR1eCAoQ29tb2RpbmVzKSAtLS1cclxuICAgIGNvbnN0IGNvbW9kaW5lc0ludGVyZXMgPSB1c2VNZW1vKCgpID0+IGV4dHJhZXJDb21vZGluZXNSZWR1eCh0ZXh0KSwgW3RleHRdKTtcclxuXHJcbiAgICBjb25zdCBjb21vZGluZXNWYWxvcmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHtcclxuICAgICAgICBpZiAoY29tb2RpbmVzSW50ZXJlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlQ29tb2RpbmVzID0gc3RhdGU/Lm9wY2lvbmVzPy5jb21vZGluZXMgfHwgY29tb2RpbmVzSW5pY2lhbGVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdGFkbzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgY29tb2RpbmVzSW50ZXJlcykge1xyXG4gICAgICAgICAgICByZXN1bHRhZG9baWRdID0gc3RvcmVDb21vZGluZXNbaWRdID8/IGNvbW9kaW5lc0luaWNpYWxlc1tpZF0gPz8gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgICB9LCBzaGFsbG93RXF1YWwpO1xyXG5cclxuICAgIC8vIC0tLSBCLiBTdXNjcmlwY2nDs24gYSB2YXJpYWJsZXMgY29uICMgKExlIHBhc2Ftb3MgZm9yUGsgc2VndXJvLCBvcGNpb25hbCkgLS0tXHJcbiAgICBjb25zdCBvYnRlbmVyVmFsb3JWYXJpYWJsZSA9IHVzZVZhcmlhYmxlc0VzY3VjaGFkYXModGV4dCwgZm9yUGshKTtcclxuXHJcbiAgICAvLyAtLS0gQy4gUHJlcHJvY2VzYW1pZW50byBzaW50w6FjdGljbyAtLS1cclxuICAgIGNvbnN0IHByb2Nlc2FkbyA9IHRleHRcclxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICcvXFx1MjA2MycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcdTIwNjMoXFx3KVxcYi9nLCAnLyQxJylcclxuICAgICAgICAucmVwbGFjZSgvX19fKi9nLCB0b2RvID0+IGBbJHt0b2RvfV1gKTtcclxuXHJcbiAgICAvLyAtLS0gRC4gVG9rZW5pemFkbyB5IFJlc29sdWNpw7NuIC0tLVxyXG4gICAgY29uc3QgcGFydGVzID0gcHJvY2VzYWRvLnNwbGl0KFJFR0VYX1NQTElUX0NPTU9ESU5FUyk7XHJcblxyXG4gICAgY29uc3QgY29udGVuaWRvID0gcGFydGVzLm1hcCgocGFydGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8gQ0FTTyAxOiBDb21vZMOtbiB0aXBvIFRFTSAoQCR0ZW0ucGF0aC5hbC5jYW1wb0ApXHJcbiAgICAgICAgY29uc3QgbWF0Y2hUZW0gPSBwYXJ0ZS5tYXRjaChJU19URU1fUEFUVEVSTik7XHJcbiAgICAgICAgaWYgKG1hdGNoVGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm9IZHIgPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyO1xyXG4gICAgICAgICAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICBjb25zdCBpZEVuYyA9IGZvclBrIVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoID0gbWF0Y2hUZW1bMV07XHJcbiAgICAgICAgICAgIGNvbnN0IHtlbmNvbnRyYWRvLCB2YWxvcn0gPSBvYnRlbmVyUG9yUGF0aChpbmZvSGRyW2lkRW5jXSwgcGF0aClcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbmNvbnRyYWRvID8gZm9ybWF0ZWFyUmVzdWx0YWRvQ29tb2RpbihTdHJpbmcodmFsb3IgPz8gU0lOX1ZBTE9SX0VOX09CSkVUT19URU0pKTogXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2luZGV4fSBzdHlsZT17eyBjb2xvcjogJ3JlZCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2BObyBzZSBlbmNvbnRyw7MgJHtwYXJ0ZX1gfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPiBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENBU08gMjogVmFyaWFibGUgZGluw6FtaWNhIGNvbiBIYXNoIChAI3ZhcmlhYmxlQClcclxuICAgICAgICBjb25zdCBtYXRjaFZhckhhc2ggPSBwYXJ0ZS5tYXRjaChJU19WQVJJQUJMRV9IQVNIX1BBVFRFUk4pO1xyXG4gICAgICAgIGlmIChtYXRjaFZhckhhc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdGVhclJlc3VsdGFkb0NvbW9kaW4ob2J0ZW5lclZhbG9yVmFyaWFibGUobWF0Y2hWYXJIYXNoWzFdKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDQVNPIDM6IENvbW9kw61uIGdsb2JhbCBkZSBSZWR1eCAoQGNvbW9kaW5AKVxyXG4gICAgICAgIGNvbnN0IG1hdGNoQ29tb2RpbiA9IHBhcnRlLm1hdGNoKElTX0NPTU9ESU5fUkVEVVhfUEFUVEVSTik7XHJcbiAgICAgICAgaWYgKG1hdGNoQ29tb2Rpbikge1xyXG4gICAgICAgICAgICBjb25zdCBub21icmVDb21vZGluID0gbWF0Y2hDb21vZGluWzFdO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxvciA9IGNvbW9kaW5lc1ZhbG9yZXNcclxuICAgICAgICAgICAgICAgID8gY29tb2RpbmVzVmFsb3Jlc1tub21icmVDb21vZGluXVxyXG4gICAgICAgICAgICAgICAgOiBjb21vZGluZXNJbmljaWFsZXNbbm9tYnJlQ29tb2RpbiBhcyBJZENvbW9kaW5dO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdGVhclJlc3VsdGFkb0NvbW9kaW4odmFsb3IpID8/XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2luZGV4fSBzdHlsZT17eyBjb2xvcjogJ3JlZCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2BObyBzZSBlbmNvbnRyw7MgJHtwYXJ0ZX1gfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ0FTTyA0OiBUZXh0byBwbGFub1xyXG4gICAgICAgIHJldHVybiBwYXJ0ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gc3R5bGU9e3N0eWxlfT57Y29udGVuaWRvfTwvc3Bhbj47XHJcbn0pO1xyXG5cclxuZXhwb3J0IHsgZ2V0QkZWYXJOYW1lcyB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8ob3B0czoge1xyXG4gICAgZm9yUGtQYWRyZTogRm9yUGssXHJcbiAgICBzYWx0bzogc3RyaW5nIHwgbnVsbCxcclxuICAgIGV4cHJlc2lvbkhhYmlsaXRhcj86IHN0cmluZyxcclxuICAgIGxpc3RvVmFsb3I/OiBWYWxvcixcclxuICAgIGFncmVnYXJWYWxvcj86IFZhbG9yLFxyXG4gICAgaGFiaWxpdGFyVmFsb3I/OiBWYWxvclxyXG59KSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0FCeXBhc2VhcjogeyB2YXJpYWJsZTogSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBWYWxvciB9W10gPSBbXTtcclxuICAgIGlmIChvcHRzLnNhbHRvKSB7XHJcbiAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhvcHRzLnNhbHRvKTtcclxuICAgICAgICBpZiAob3B0cy5saXN0b1ZhbG9yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0FCeXBhc2Vhci5wdXNoKHsgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IG9wdHMubGlzdG9WYWxvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYWdyZWdhclZhbG9yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0FCeXBhc2Vhci5wdXNoKHsgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogb3B0cy5hZ3JlZ2FyVmFsb3IgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdHMuZXhwcmVzaW9uSGFiaWxpdGFyICYmIG9wdHMuaGFiaWxpdGFyVmFsb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlc3B1ZXN0YXNBQnlwYXNlYXIucHVzaCh7IHZhcmlhYmxlOiBvcHRzLmV4cHJlc2lvbkhhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG9wdHMuaGFiaWxpdGFyVmFsb3IgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzcHVlc3Rhc0FCeXBhc2Vhci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGFzLCB7IGZvclBrOiBvcHRzLmZvclBrUGFkcmUsIHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNBQnlwYXNlYXIgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IFZFUl9ET01JTklPID0gZmFsc2U7IC8vIGVsIGVuY3Vlc3RhZG9yIG5vIG5lY2VzaXRhIHZlciBlbCBkb21pbmlvIGVuIGNhZGEgZW5jdWVzdGEgcG9ycXVlIGVsIGRvbWluaW8gZGVwZW5kZSBkZWwgw6FyZWEgeSBzZSBkZWR1Y2UgZGVsIHByaW1lciBkw61naXRvIGRlbCBuw7ptZXJvIGRlIGVuY3Vlc3RhXHJcbi8vIG5vIHBvbmVyIFZFUl9ET01JTklPIGVuIHRydWUsIGNhbWJpYXIgcG9yIHVuYSB2YXJpYWJsZSBxdWUgc2UgZmlqZSBzaSBlbCBETSBlc3TDoSBlbiBtb2RvIHBydWViYSBvIGVuIG1vZG8gXCJkaXNlw7FvIGNvbmNlcHR1YWxcIlxyXG5cclxuY29uc3QgSURfQk9UT05fVk9MVkVSX0hEUiA9ICdib3Rvbi12b2x2ZXItaGRyJztcclxuY29uc3QgSURfQk9UT05fQ0VSUkFSID0gJ2JvdG9uLWNlcnJhci1lbmN1ZXN0YSc7XHJcblxyXG52YXIgZGViZVNhbHRhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XHJcbiAgICAvKlxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXY6S2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXYua2V5ID09ICdFbnRlcicgfHwgZXYua2V5Q29kZSA9PSAxMztcclxuICAgIH0pXHJcbiAgICAqL1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0geyBjbGFzc05hbWU/OiBzdHJpbmcsIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcywgaWQ/OiBzdHJpbmcsIHRhYkluZGV4PzogbnVtYmVyIH0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnZGVmYXVsdCcgfCAnaW5oZXJpdCcgfCAnc3VjY2VzcydcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3QgQnV0dG9uID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCB0eXBlLFxyXG4gICAgLi4ub3RoZXJcclxufToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+LCAvLyAgKGV2ZW50Ok1vdXNlRXZlbnQvKiA8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+Ki8pPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86ICdzbWFsbCcsXHJcbiAgICB0eXBlPzogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzogYW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OiBhbnksIGRpc2FibGVSaXBwbGU/OiBhbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiA8YnV0dG9uXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50ID09ICdjb250YWluZWQnID8gJycgOiAnLScgKyAodmFyaWFudCA9PSAnb3V0bGluZWQnID8gJ291dGxpbmUnIDogdmFyaWFudCl9LSR7KGNvbG9yID09ICdkZWZhdWx0JyB8fCBjb2xvciA9PSAnaW5oZXJpdCcgPyAnc2Vjb25kYXJ5JyA6IGNvbG9yID09ICdzZWNvbmRhcnknID8gJ2RhbmdlcicgOiBjb2xvcikgfHwgJ3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lIHx8ICcnfSAke3NpemUgPT0gJ3NtYWxsJyA/ICdidG4tc20nIDogJyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIHR5cGU9e3R5cGV9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IHN0eWxlVG9Dc3MgPSAoc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycgfHwgc3R5bGUgPT0gbnVsbCkgcmV0dXJuIHN0eWxlO1xyXG4gICAgY29uc3QgcmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrIGluIHN0eWxlKSB7XHJcbiAgICAgICAgY29uc3QgdiA9IChzdHlsZSBhcyBhbnkpW2tdO1xyXG4gICAgICAgIGlmICh2ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzLnB1c2goYCR7ay5yZXBsYWNlKC9bQS1aXS9nLCAobTogc3RyaW5nKSA9PiBcIi1cIiArIG0udG9Mb3dlckNhc2UoKSl9OiR7dn1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLmpvaW4oJzsnKTtcclxufVxyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7IHZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgc3R5bGUsIC4uLm90aGVyIH06IHtcclxuICAgIHZhcmlhbnQ/OiBzdHJpbmcsXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86ICgpID0+IHZvaWQsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogJ3NtYWxsJyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyxcclxuICAgICRhdHRycz86IHt9XHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiBodG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIHN0eWxlOiBzdHlsZVRvQ3NzKHN0eWxlKSxcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudCA9PSAnY29udGFpbmVkJyA/ICcnIDogJy0nICsgKHZhcmlhbnQgPT0gJ291dGxpbmVkJyA/ICdvdXRsaW5lJyA6IHZhcmlhbnQpfS0keyhjb2xvciA9PSAnZGVmYXVsdCcgfHwgY29sb3IgPT0gJ2luaGVyaXQnID8gJ3NlY29uZGFyeScgOiBjb2xvciA9PSAnc2Vjb25kYXJ5JyA/ICdkYW5nZXInIDogY29sb3IpIHx8ICdzZWNvbmRhcnknfSAke2NsYXNzTmFtZSB8fCAnJ30gJHtzaXplID09ICdzbWFsbCcgPyAnYnRuLXNtJyA6ICcnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjogeyBjbGljazogb25DbGljayB9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6IHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OiBib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOiBib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzogYW55LFxyXG4gICAgdmFsdWU/OiBhbnksXHJcbiAgICB0eXBlOiBhbnksXHJcbiAgICBsYWJlbD86IHN0cmluZyxcclxuICAgIGVycm9yPzogYm9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OiBzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OiBib29sZWFuLFxyXG4gICAgb25DaGFuZ2U/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uRm9jdXM/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uQmx1cj86IChldmVudDogYW55LCB2YWxvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86IFJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pID0+IDxpbnB1dFxyXG4gICAgICAgIHsuLi5wcm9wcy5pbnB1dFByb3BzfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICAgICAgdmFsdWU9e3Byb3BzLnZhbHVlfVxyXG4gICAgICAgIHR5cGU9e3Byb3BzLnR5cGV9XHJcbiAgICAgICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICAgICAgb25CbHVyPXsoZXZ0KSA9PiBwcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgIG9uS2V5RG93bj17cHJvcHMub25LZXlEb3dufVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuICAgIC8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7IGNoaWxkcmVuLCAuLi5vdGhlcnMgfToge1xyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNvbXBvbmVudD86IHN0cmluZ1xyXG4gICAgdmFyaWFudD86ICdib2R5Mid8J2g1J3wnaDYnXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiBSZWFjdC5jcmVhdGVFbGVtZW50KG90aGVycy52YXJpYW50IHx8IG90aGVycy5jb21wb25lbnQgfHwgJ2RpdicsIG90aGVycywgY2hpbGRyZW4pO1xyXG5cclxuZnVuY3Rpb24gR3JpZChwcm9wczoge1xyXG4gICAgY29udGFpbmVyPzogYm9vbGVhbixcclxuICAgIHNwYWNpbmc/OiBudW1iZXIsXHJcbiAgICBpdGVtPzogYm9vbGVhbixcclxuICAgIHdyYXA/OiAnd3JhcCcgfCAnbm93cmFwJyxcclxuICAgIGRpcmVjdGlvbj86ICdyb3cnIHwgJ2NvbHVtbidcclxuICAgIGFsaWduSXRlbXM/OiAnc3RyZXRjaCcgfCAnZmxleC1zdGFydCcgfCAnZmxleC1lbmQnIHwgJ2NlbnRlcicgfCAnYmFzZWxpbmUnLFxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIHhzPzogbnVtYmVyLFxyXG4gICAgc20/OiBudW1iZXIsXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSB7XHJcbiAgICB2YXIgeyBjb250YWluZXIsIGl0ZW0sIHdyYXAsIGRpcmVjdGlvbiwgYWxpZ25JdGVtcywgY2hpbGRyZW4sIGNsYXNzTmFtZSwgeHMsIHNtLCBzcGFjaW5nLCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIHsuLi5vdGhlcn1cclxuICAgICAgICBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZSB8fCAnJ30gJHt4cyAhPSBudWxsID8gJ2dyaWQteHMtJyArIHhzIDogJyd9ICR7c20gIT0gbnVsbCA/ICdncmlkLXNtLScgKyBzbSA6ICcnfWB9XHJcbiAgICAgICAgc3R5bGU9e2NvbnRhaW5lciA/IHtcclxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICBmbGV4V3JhcDogd3JhcCxcclxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogZGlyZWN0aW9uLFxyXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiBhbGlnbkl0ZW1zLFxyXG4gICAgICAgICAgICBtYXJnaW46IHNwYWNpbmcgIT0gbnVsbCA/IHNwYWNpbmcgKiA4ICsgJ3B4JyA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0gOiB7XHJcbiAgICAgICAgfX1cclxuICAgID57Y2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbmludGVyZmFjZSBGYXN0U2V0dXBQcm9wcyB7XHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmFzdFNldHVwKHByb3BzOiBGYXN0U2V0dXBQcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGU8bnVsbCB8IEhUTUxFbGVtZW50PihudWxsKTtcclxuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9IGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0+XHJcbiAgICAgICAgICAgICAgICA8SUNPTi5TZXR0aW5ncyAvPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxNZW51XHJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxyXG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxyXG4gICAgICAgICAgICA8L01lbnU+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG52YXIgcDEyID0gJ3AxMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMiA9ICdzcDInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDMgPSAnc3AzJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A0ID0gJ3NwNCcgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNSA9ICdzcDUnIGFzIElkVmFyaWFibGU7XHJcblxyXG4vKlxyXG4vLyBjb25zdCB0YWtlRWxlbWVudE9yRGVmYXVsdDxLLCBUIGV4dGVuZHMgW0sgaW5dLCBEPigpXHJcbmZ1bmN0aW9uIGlzSW48ViwgVD4oazprZXlvZiBULCBvYmplY3Q6VCk6IG9iamVjdFtrXSBpcyBWe1xyXG4gICAgcmV0dXJuIHRydWVcclxufVxyXG4qL1xyXG5mdW5jdGlvbiB0YWtlRWxlbWVudE9yRGVmYXVsdDxWLCBLIGV4dGVuZHMgc3RyaW5nLCBLTyBleHRlbmRzIHN0cmluZz4oazogSywgb2JqZWN0OiB7IFtrIGluIEtPXTogViB9LCBkZWZhdWx0VmFsdWU6IFYpOiBWIHtcclxuICAgIHJldHVybiBrIGluIG9iamVjdCA/XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwb3IgYWxndW5hIHJhesOzbiBUUyBubyBxdWllcmUgZW50ZW5kZXIgcXVlIHNpIGsgZXN0w6EgZW4gb2JqZWN0LCBvYmplY3Rba10gZXhpc3RlXHJcbiAgICAgICAgb2JqZWN0W2tdXHJcbiAgICAgICAgOiBkZWZhdWx0VmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxpZWd1ZUVuY2FiZXphZG8ocHJvcHM6IHsgY2FzaWxsZXJvOiBDYXNpbGxlcm9FbmNhYmV6YWJsZSwgbGVlcj86IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgZm9yUGtOdWxsID0ge30gYXMgRm9yUGs7XHJcbiAgICByZXR1cm4gPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvfSBsZWVyPXtwcm9wcy5sZWVyfSBmb3JQaz17Zm9yUGtOdWxsfSAvPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ViaXJIYXN0YShlbGVtZW50bzogSFRNTEVsZW1lbnQgfCBudWxsLCBmdW46IChlbGVtZW50bzogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB8IG51bGwge1xyXG4gICAgaWYgKGVsZW1lbnRvID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGZ1bihlbGVtZW50bykpIHJldHVybiBlbGVtZW50bztcclxuICAgIHJldHVybiBzdWJpckhhc3RhKGVsZW1lbnRvLnBhcmVudEVsZW1lbnQsIGZ1bik7XHJcbn1cclxuXHJcbnZhciBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBCb3RvbkJvcnJhcih7IGlkLCB2YXJpYWJsZSwgZm9yUGssIHZhbG9yT3BjaW9uIH06IHsgaWQ6IHN0cmluZywgdmFyaWFibGU6IElkVmFyaWFibGUsIGZvclBrOiBGb3JQaywgdmFsb3JPcGNpb24/OiBhbnkgfSkge1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IHZhcmlhYmxlLCBmb3JQazogZm9yUGsgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1ib3JyYXJcIj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGlkPXtpZH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3ZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3ZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLWJvcnJhclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlciAvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhbHRvRGVzcGxpZWd1ZSh7IGNhc2lsbGVybywgcHJlZmlqbyB9OiB7IGNhc2lsbGVybzogUHJlZ3VudGEgfCBPcGNpb24gfCBGaWx0cm8sIHByZWZpam8/OiBzdHJpbmcgfSkge1xyXG4gICAgcmV0dXJuIGNhc2lsbGVyby5zYWx0byA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYXNlXCI+XHJcbiAgICAgICAgICAgIHtwcmVmaWpvID8gPHNwYW4gY2xhc3NOYW1lPVwicHJlZmlqb1wiPntwcmVmaWpvfSA8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICAgICAgPElDT04uVHJlbmRpbmdGbGF0IC8+PHNwYW4+e2Nhc2lsbGVyby5zYWx0b308L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgOiBudWxsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbkRlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBPcGNpb24sIHZhbG9yT3BjaW9uOiBudW1iZXIsIHZhcmlhYmxlOiBJZFZhcmlhYmxlLCBmb3JQazogRm9yUGssIGxlZXI6IGJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IHsgY2FzaWxsZXJvIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBzYWx0b0F1dG9tYXRpY28gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvKTtcclxuICAgIHZhciBoYW5kbGVDbGljazogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHN1YmlySGFzdGEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBlbGVtZW50byA9PiBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgdmFyIHRpZW5lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nKTtcclxuICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsICdOTycpO1xyXG4gICAgICAgIGlmIChlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpIHtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCAnTk8nKTtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHsgcmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IHByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTogcHJvcHMudmFyaWFibGUsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICBpZiAoIXJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgdGllbmUgPT0gJ1NJJyA/ICdOTycgOiAnU0knKTtcclxuICAgICAgICAgICAgaWYgKHRpZW5lICE9ICdTSScpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pIHtcclxuICAgICAgICAgICAgICAgIHZhciBib3RvblN0eWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSkgPyBudWxsIDogZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+XHJcbiAgICAgICAge3Byb3BzLmNvbkJvdG9uQm9ycmFyID8gPEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgb3BjaW9uLXZhci0ke3Byb3BzLnZhcmlhYmxlfS0ke3Byb3BzLnZhbG9yT3BjaW9ufS1ib3JyYXJgfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIHZhcmlhYmxlPXtwcm9wcy52YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3JPcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgIC8+IDogbnVsbH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGlkPXtgb3BjaW9uLXZhci0ke3Byb3BzLnZhcmlhYmxlfS0ke3Byb3BzLnZhbG9yT3BjaW9ufWB9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtwcm9wcy52YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1zZWxlY2Npb25cIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cclxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHdyYXA9XCJub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby52ZXJfaWQgfHwgY2FzaWxsZXJvLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvbi10ZXh0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGRlYmUtbGVlcj17Y2FzaWxsZXJvLmxlZXIgPyAnU0knIDogY2FzaWxsZXJvLmxlZXIgPT09IGZhbHNlID8gJ05PJyA6IHByb3BzLmxlZXIgPyAnU0knIDogJ05PJ30+PEJyZWFrZWFibGVUZXh0IHRleHQ9e2Nhc2lsbGVyby5ub21icmV9IC8+PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+PEJyZWFrZWFibGVUZXh0IHRleHQ9e2Nhc2lsbGVyby5hY2xhcmFjaW9ufSAvPjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gLz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2lOb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pIHtcclxuICAgIHJldHVybiA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfVxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICBsZWVyPXtmYWxzZX1cclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5kZXNwbGllZ3VlQ29udGVuaWRvfVxyXG4gICAgLz5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhOiBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgQ29uanVudG9QcmVndW50YXMpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50XHJcbiAgICApID0+IHtcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvciA9IHZhbG9yQWN0dWFsICE9IG51bGwgJiYgZmVlZGJhY2tWYXIgIT0gbnVsbCA/IChmZWVkYmFja1Zhci5jb25Qcm9ibGVtYSA/ICdpbnZhbGlkbycgOiAndmFsaWRvJykgOiAnTk8nO1xyXG4gICAgICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgICAgIGlmIChwcmVndW50YS50aXBvdmFyKSB7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBmZWVkYmFja011bHRpID0gcHJlZ3VudGEuY2FzaWxsZXJvcy5maWx0ZXIoYyA9PiBjLnZhcl9uYW1lICE9IG51bGwpLnJlZHVjZSgocHYsIG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmIgPSBmZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG8gPT0gJ2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbyA9PSAnc2FsdGVhZGEnIHx8IGZiLmVzdGFkbyA9PSAnZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgeyB0aWVuZUFjdHVhbDogZmFsc2UsIGVzdGFTYWx0ZWFkYTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgZXN0YWRvID0gZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbCA/ICdhY3R1YWwnIDogZmVlZGJhY2tNdWx0aS5lc3RhU2FsdGVhZGEgPyAnc2FsdGVhZGEnIDogJ3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYSA/ICdTSScgOiAnTk8nKTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudmFyX25hbWUpIHtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksIDApO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9PcGNpb246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IgKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsb3JPcGNpb24gPSBlbGVtZW50b09wY2lvbi5nZXRBdHRyaWJ1dGUoJ3ZhbG9yLW9wY2lvbicpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvT3BjaW9uLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yT3BjaW9uID09IHZhbG9yQWN0dWFsID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDogSFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDogSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIgKyBwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6IHsgb3BjaW9uTTogT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCB7IG9wY2lvbk0gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYG9wY2lvbk0tJHtvcGNpb25NLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgdmFyIHN0eWxlczogUmVhY3QuQ1NTUHJvcGVydGllcyA9IG9wY2lvbk0uZXNwZWNpYWw/LmZsZXhEaXJlY3Rpb24gPyB7IGZsZXhEaXJlY3Rpb246IG9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbiB9IDogeyBmbGV4V3JhcDogJ3dyYXAnIH07XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgY29uc3QgdXBkYXRlV2luZG93V2lkdGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVdpbmRvd1dpZHRoKTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgICAgICBzdHlsZT17c3R5bGVzfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9XHJcbiAgICAgICAgICAgIGxlZXI9e29wY2lvbk0ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHdpbmRvd1dpZHRoIC0gNDAwIH19IC8vVE9ETyBNRUpPUkFSXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMub3BjaW9uTS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICdob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgUHJlZ3VudGFTaW1wbGUgfCBDb25zaXN0ZW5jaWEgfCBUZXh0byB8IFBNYXRyaXpcclxuXHJcbmNvbnN0IGdldExvc01ldGFkYXRvcyA9IChjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlKTogUmVhY3QuSlNYLkVsZW1lbnQgPT5cclxuICAgIDxkaXYgbG9zLW1ldGFkYXRvcz1cInNpXCI+XHJcbiAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyICE9ICdzaV9ubycgP1xyXG4gICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSAmJiBjYXNpbGxlcm8ub3B0YXRpdm8gPyA8c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmNhbGN1bGFkYSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiY2FsY3VsYWRhXCI+Y2FsY3VsYWRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmcgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9hdXRvaW5nXCI+YXV0b2luZzoge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZ308L3NwYW4+IDogbnVsbH1cclxuICAgIDwvZGl2PlxyXG5cclxuZnVuY3Rpb24gRW5jYWJlemFkb0Rlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsXHJcbiAgICB2ZXJJZEd1aW9uPzogYm9vbGVhbixcclxuICAgIGxlZXI/OiBib29sZWFuLFxyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZSB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIgKyBpZDtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZW5jYWJlemFkb1wiXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBjbGFzc05hbWU9XCJpZC1kaXZcIiB0aXRsZT17YCR7Y2FzaWxsZXJvLmNhc2lsbGVyb30gLSAke2Nhc2lsbGVyby52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxIC0gTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwgeyBwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQayB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgIHt2ZXJfaWR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7KGNhc2lsbGVyby50aXBvdmFyID09IFwic2lfbm9cIiB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIpID8gPENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVybyBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyA8ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJib3JyYXItcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlciAvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyAobnNfbmMgPT4gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wibnNuYy1wcmVndW50YS1cIiArIGNhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG5zX25jLCB2YXJpYWJsZTogY2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOiBmb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY2FzaWxsZXJvLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYyA/PyAtOSkgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS1kaXZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmVcIj48QnJlYWtlYWJsZVRleHQgdGV4dD17Y2FzaWxsZXJvLm5vbWJyZX0gLz5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmdwcyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzEwcHgnIH19IG9uQ2xpY2s9eyhfZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhck5hbWUgPSBjYXNpbGxlcm8udmFyX25hbWUhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWdyZWdhckluZm9HUFMgPSAoaW5mbzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXNwdWVzdGFzOiByQWN0dWFsZXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsb3JBY3R1YWwgPSByQWN0dWFsZXNbdmFyTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1eCA9IEpTT04ucGFyc2UodmFsb3JBY3R1YWw/LnRvU3RyaW5nKCkgfHwgXCJbXVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXgudW5zaGlmdChpbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogdmFyTmFtZSwgcmVzcHVlc3RhOiBKU09OLnN0cmluZ2lmeShhdXgpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGFncmVnYXJJbmZvR1BTKGAke2RhdGV0aW1lLm5vdygpLnRvWW1kSG1zKCl9IC0gZXNwZXJhbmRvIHB1bnRvIGdwc2ApIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQgfSA9IHBvc2l0aW9uLmNvb3JkcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhVG9TYXZlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHBvc2l0aW9uLnRpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoSlNPTi5zdHJpbmdpZnkoZGF0YVRvU2F2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9PjxJQ09OLkxvY2F0aW9uIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjbGFyYWNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnNhbHRvICYmIGNhc2lsbGVyby50aXBvYyA9PSAnRklMVFJPJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IHByZWZpam89e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKSF9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJyZWFrZWFibGVUZXh0IHRleHQ9e2Nhc2lsbGVyby5hY2xhcmFjaW9ufSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICB7Z2V0TG9zTWV0YWRhdG9zKGNhc2lsbGVybyl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhKHByb3BzOiB7IGZvclBrOiBGb3JQaywgdmFyaWFibGVCb3JyYXI6IElkVmFyaWFibGUgfSkge1xyXG4gICAgdmFyIFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKCEhcHJvcHMudmFyaWFibGVCb3JyYXIpXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQSh7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IG51bGwgfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxQb3BvdmVyXHJcbiAgICAgICAgaWQ9e1wicG9wb3Zlci1jb25maXJtYXJcIn1cclxuICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgIGFuY2hvck9yaWdpbj17e1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICAgIH19XHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxyXG4gICAgICAgIH19XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+TGEgcHJlZ3VudGEgdGllbmUgcmVnaXN0cmFkYSB1bmEgcmVzcHVlc3RhIHF1ZSBubyBmdWUgZGV0ZWN0YWRhIGNvbW8gZXJyw7NuZWE8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtYS1ib3RvbmVzXCI+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMudmFyaWFibGVCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBwcm9wcy52YXJpYWJsZUJvcnJhciwgcmVzcHVlc3RhOiBudWxsIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpO1xyXG4gICAgICAgICAgICB9fT5ib3JyYXIgcmVzcHVlc3RhPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PnZvbHZlciBzaW4gYm9ycmFyPC9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L1BvcG92ZXI+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgcmV0dXJuIGxvbmdpdHVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4pIHtcclxuICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIHZhciB7IHRvcCwgZW5mb2NhZG8sIGVsZW1lbnRvSW5wdXRWYXJpYWJsZSB9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AgPiAwICYmICghZW5mb2NhZG8gfHwgXCJzYWx0YSBzaWVtcHJlXCIpKSB7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/LmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhbXBvKHByb3BzOiB7IGRpc2FibGVkOiBib29sZWFuLCBwcmVndW50YTogUHJlZ3VudGFTaW1wbGUgfCBQcmVndW50YUNvbk9wY2lvbmVzIHwgUHJlZ3VudGFDb25TaU5vIHwgT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQaywgbWluaT86IGJvb2xlYW4sIGhpZGRlbj86IGJvb2xlYW4gfCAncXVpdGFyJyB9KSB7XHJcbiAgICB2YXIgeyBwcmVndW50YSwgZGlzYWJsZWQsIG1pbmkgfSA9IHByb3BzO1xyXG4gICAgdmFyIHsgc2FsdG9BdXRvbWF0aWNvLCBjb25DYW1wb09wY2lvbmVzIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbG9uZ2l0dWQgPSBtaW5pID8gcHJlZ3VudGEuY2FzaWxsZXJvcy5yZWR1Y2UoKGFjdW0sIG8pID0+IE1hdGgubWF4KG8uY2FzaWxsZXJvLnRvU3RyaW5nKCkubGVuZ3RoLCBhY3VtKSwgMCkgOlxyXG4gICAgICAgIHByZWd1bnRhLmxvbmdpdHVkO1xyXG4gICAgLy8gdmFyIFt2YWxvciwgc2V0VmFsb3JdID0gdXNlU3RhdGUocHJvcHMudmFsb3IpO1xyXG4gICAgdmFyIFtlZGl0YW5kbywgc2V0RWRpdGFuZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy8gdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vICAgICBzZXRWYWxvcihwcm9wcy52YWxvcilcclxuICAgIC8vIH0sIFtwcm9wcy52YWxvcl0pO1xyXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcclxuICAgICAgICBtYXhMZW5ndGg6IGxvbmdpdHVkLFxyXG4gICAgICAgIGVudGVyS2V5SGludDogXCJuZXh0XCIgYXMgY29uc3QsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAobnVldm9WYWxvcjogVmFsb3IgfCB0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTykgPT4ge1xyXG4gICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBwcmVndW50YS52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51ZXZvVmFsb3IgfSk7XHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlICYmIGRlYmVTYWx0YXIpIHtcclxuICAgICAgICAgICAgKHByZWd1bnRhLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKSA/IG51bGwgOiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHByZWd1bnRhLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICh7IGVzQm90b25Db25maXJtYXIgfTogeyBlc0JvdG9uQ29uZmlybWFyOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXNCb3RvbkNvbmZpcm1hciA/IHRydWUgOiAoc2FsdG9BdXRvbWF0aWNvIHx8IGNvbkNhbXBvT3BjaW9uZXMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBpc0lucHV0Rm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdURVhUQVJFQScpO1xyXG4gICAgICAgIGlmIChpc0lucHV0Rm9jdXNlZCkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b0lucHV0VmFyaWFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdmFyLSR7cHJlZ3VudGEudmFyX25hbWUgfHwgJyd9YCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgb25DaGFuZ2UoZWxlbWVudG9JbnB1dFZhcmlhYmxlID8gZWxlbWVudG9JbnB1dFZhcmlhYmxlLnZhbHVlIDogTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgbnVlc3RyYUxvbmdpdHVkID0gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQocHJlZ3VudGEubG9uZ2l0dWQgfHwgbG9uZ2l0dWQpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjYW1wb1wiIG51ZXN0cmEtbG9uZ2l0dWQ9e251ZXN0cmFMb25naXR1ZH0gc3R5bGU9e3Byb3BzLmhpZGRlbiA9PSAncXVpdGFyJyA/IHsgZGlzcGxheTogJ25vbmUnIH0gOiBwcm9wcy5oaWRkZW4gPyB7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0gOiB1bmRlZmluZWR9PlxyXG4gICAgICAgIHttaW5pID8gbnVsbCA6IDxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YGJvcnJhci1hYmllcnRhLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgdmFyaWFibGU9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz59XHJcbiAgICAgICAgPGZvcm0gXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2FtcG8td3JhcHBlclwiIFxyXG4gICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnY29udGVudHMnIH19IFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgPFRleHRGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtgdmFyLSR7cHJlZ3VudGEudmFyX25hbWUgfHwgJyd9YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/Lmdwc31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2YXJpYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dCA/PyBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyhwcmVndW50YS50aXBvdmFyKX1cclxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KSA9PiBzZXRFZGl0YW5kbyh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyhfZXZlbnQsIHZhbG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzRW50ZXIgPSAoZXZlbnQua2V5ID09ICdFbnRlcicgfHwgZXZlbnQua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzRW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQoeyBlc0JvdG9uQ29uZmlybWFyOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2Rpc2FibGVkIHx8IHByZWd1bnRhLmVzcGVjaWFsPy5ncHMgfHwgbWluaSA/IG51bGwgOlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1jb25maXJtYXItY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvID8gXCJjb250YWluZWRcIiA6ICdvdXRsaW5lZCd9IHNpemU9XCJzbWFsbFwiIGNvbG9yPXtlZGl0YW5kbyA/ICdwcmltYXJ5JyA6ICdkZWZhdWx0J31cclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b24tY29uZmlybWFyPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPjxJQ09OLkNoZWNrIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uW11cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uZXNEZXNwbGllZ3VlKFxyXG4gICAgeyBjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssIGxlZXIsIGRlc3BsaWVndWVDb250ZW5pZG8gfTpcclxuICAgICAgICB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzOiBJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOiBGb3JQaywgbGVlcjogYm9vbGVhbiwgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9XHJcbikge1xyXG4gICAgY29uc3QgZGVzcGxlZ2FyT3Ryb3MgPSAob3BjaW9uOiBPcGNpb24sIHNvbG9QYXJhRGVzcGxpZWd1ZTogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwpID0+IG9wY2lvbi5jYXNpbGxlcm9zLm1hcCgoc3ViUHJlZ3VudGE6IFByZWd1bnRhKSA9PiAoXHJcbiAgICAgICAgc29sb1BhcmFEZXNwbGllZ3VlID09IG51bGwgfHwgc29sb1BhcmFEZXNwbGllZ3VlID09IHN1YlByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gP1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm90cm9zLWVzcGVjaWZpY2FyXCIgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJyB9fSBrZXk9e3N1YlByZWd1bnRhLmlkX2Nhc2lsbGVyb30+XHJcbiAgICAgICAgICAgICAgICA8UHJlZ3VudGFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3N1YlByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa31cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nc3VwZXJpb3InXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4gOiBudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDw+PGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9wY2lvbmVzXCIgZGVzcGxpZWd1ZS1jb250ZW5pZG89e2Rlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24sIGk6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhID8gKG9wY2lvbi5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8T3BjaW9uRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxvck9wY2lvbj17b3BjaW9uLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXtsZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25Cb3RvbkJvcnJhcj17aSA9PSAwIHx8IGRlc3BsaWVndWVDb250ZW5pZG8gIT0gJ2hvcml6b250YWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG8gPT0gJ2hvcml6b250YWwnID8gbnVsbCA6IGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbyA9PSAnaG9yaXpvbnRhbCcgPyBjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24pID0+XHJcbiAgICAgICAgICAgIGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbClcclxuICAgICAgICApIDogbnVsbH08Lz5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvID0ge1xyXG4gICAgRjogJ2Zvcm11bGFyaW8nLFxyXG4gICAgQjogJ2Jsb3F1ZScsXHJcbiAgICBQOiAncHJlZ3VudGEnLFxyXG4gICAgQ1A6ICdjb25qdW50b3ByZWd1bnRhcycsXHJcbiAgICBPOiAnb3BjaW9uJyxcclxuICAgIE9NOiAnbXVsdGlwbGUnLFxyXG4gICAgRklMVFJPOiAnZmlsdHJvJyxcclxuICAgIENPTlM6ICdjb25zaXN0ZW5jaWEnLFxyXG4gICAgQkY6ICdib3RvbmZvcm11bGFyaW8nLFxyXG4gICAgVEVYVE86ICdhY2xhcmFjaW9uc3VwZXJpb3InLFxyXG4gICAgUE1BVFJJWjogJ3ByZWd1bnRhZW5mb3JtYWRlbWF0cml6JyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOiB7XHJcbiAgICBjYXNpbGxlcm86IFByZWd1bnRhIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBCb3RvbkZvcm11bGFyaW8gfCBDb25zaXN0ZW5jaWEgfCBPcGNpb25NdWx0aXBsZSB8IFRleHRvIHwgUE1hdHJpeixcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG8/OiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InXHJcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIHwgUmVhY3QuUmVhY3ROb2RlW10sXHJcbiAgICBcIm9jdWx0YXItc2FsdGVhZGFcIj86ICdTSScgfCAnTk8nIHwgJ0lOSEFCSUxJVEFSJyB8IHVuZGVmaW5lZFxyXG59KSB7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIGtleT17YCR7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfS0ke3Byb3BzLmlkIHx8IHByb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjbGFzc05hbWU9e2BjYXNpbGxlcm8gJHtub21icmVDYXNpbGxlcm9bcHJvcHMuY2FzaWxsZXJvLnRpcG9jXX1gfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICAgICAgZGVzcGxpZWd1ZS1lbmNhYmV6YWRvPXtwcm9wcy5jYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gcHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gJ3N1cGVyaW9yJ31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcm9wc1tcIm9jdWx0YXItc2FsdGVhZGFcIl19XHJcbiAgICA+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBQcmVndW50YURlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHByZWd1bnRhOiBQcmVndW50YSxcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InLFxyXG4gICAgcGFyYVBNYXRyaXo/OiB0cnVlXHJcbn0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhKVxyXG4gICAgfSlcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICB2YXIgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fVxyXG4gICAgaWYgKHByZWd1bnRhLmRlc3BsaWVndWUgPT0gJ2dyaWQnKSB7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdncmlkJztcclxuICAgICAgICBzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zID0gJ3JlcGVhdCgzLDFmciknO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcy5wYXJhUE1hdHJpeiA/XHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAge2dldExvc01ldGFkYXRvcyhwcmVndW50YSl9XHJcbiAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhLmNhbGN1bGFkYSA/IHRydWUgOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgbWluaT17dHJ1ZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8Lz5cclxuICAgICAgICA6IDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XHJcbiAgICAgICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3ZhciB8fCBcIm11bHRpcGxlXCJ9XHJcbiAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3ByZWd1bnRhLmRlc3BsaWVndWVPY3VsdGEgPyAocHJlZ3VudGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPXtwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkb31cclxuXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBsZWVyPXtwcmVndW50YS5sZWVyICE9PSBmYWxzZX1cclxuICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj57XHJcbiAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwic2lfbm9cIiA/IDxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLnByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVndW50YS5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6IFByZWd1bnRhU2ltcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPlxyXG4gICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb24gPT4gb3BjaW9uLnNhbHRvKSA/IFwicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCIgOiBcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IFwiXCJ9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gUE1hdHJpekRlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIGNhc2lsbGVybzogUE1hdHJpeixcclxuICAgIGZvclBrOiBGb3JQayxcclxufSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YFxyXG4gICAgY29uc3QgY29scyA9IChjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pXHJcbiAgICAgICAgLmZpbmQoKG9wY2lvbk11bHRpcGxlKSA9PiBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nKT8uY2FzaWxsZXJvc1xyXG4gICAgICAgIC5tYXAoKHByZWd1bnRhKSA9PiBwcmVndW50YS5ub21icmUpO1xyXG4gICAgY29uc3QgdGRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHsgdGV4dEFsaWduOiAnY2VudGVyJywgd2lkdGg6IGNvbHMgPyAoNTUwIC8gKGNvbHMubGVuZ3RoKSkudG9TdHJpbmcoKSArICdweCcgOiAnJyB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAge2NvbHM/Lm1hcCgoY29sLCBpKSA9PiA8dGgga2V5PXtpfSBzY29wZT1cImNvbFwiIHN0eWxlPXt0ZFN0eWxlfT57Y29sfTwvdGg+KX1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIHsoY2FzaWxsZXJvLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57b3BjaW9uTXVsdGlwbGUubm9tYnJlfTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3BjaW9uTXVsdGlwbGUuY2FzaWxsZXJvcy5tYXAoKHByZWd1bnRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRkIGtleT17aWR9IGlkPXtpZH0+PFByZWd1bnRhRGVzcGxpZWd1ZSBmb3JQaz17cHJvcHMuZm9yUGt9IHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhfSBkZXNwbGllZ3VlRW5jYWJlemFkbz1cInN1cGVyaW9yXCIgcGFyYVBNYXRyaXo9e3RydWV9IC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj48L2Rpdj5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG52YXIgY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGZvcm11bGFyaW86IElkRm9ybXVsYXJpb1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgcmV0dXJuICFoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjogUmVzcHVlc3RhcywgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOiBFc3RydWN0dXJhLCBmb3JQa1BhZHJlOiBGb3JQaywgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0pOiBIdG1sVGFnPEhUTUxEaXZFbGVtZW50PiB7XHJcbiAgICB2YXIgZm9ybXNWaXZpZW5kYSA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcyA9IChsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykpLmFycmF5KCk7XHJcblxyXG4gICAgdmFyIGNhc2lsbGVyb3NQYWRyZSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGtQYWRyZS5mb3JtdWxhcmlvXT8uY2FzaWxsZXJvcz8uY2FzaWxsZXJvcyB8fCBbXTtcclxuICAgIHZhciBvcmRlbkZvcm11bGFyaW9zQmZQYWRyZTogSWRGb3JtdWxhcmlvW10gPSBbXTtcclxuICAgIGZvciAodmFyIGNhc2lsbGVybyBvZiBjYXNpbGxlcm9zUGFkcmUpIHtcclxuICAgICAgICBpZiAoY2FzaWxsZXJvLnRpcG9jID09ICdCRicgJiYgY2FzaWxsZXJvLnNhbHRvKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8uc3RhcnRzV2l0aCgnRjonKSA/IGNhc2lsbGVyby5zYWx0byA6ICdGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgaWYgKCFvcmRlbkZvcm11bGFyaW9zQmZQYWRyZS5pbmNsdWRlcyhmb3JtSGlqbykpIHtcclxuICAgICAgICAgICAgICAgIG9yZGVuRm9ybXVsYXJpb3NCZlBhZHJlLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBvYnRlbmVyUG9zaWNpb25Gb3JtdWxhcmlvID0gKGZvcm11bGFyaW86IElkRm9ybXVsYXJpbyk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgdmFyIGlkeEJmID0gb3JkZW5Gb3JtdWxhcmlvc0JmUGFkcmUuaW5kZXhPZihmb3JtdWxhcmlvKTtcclxuICAgICAgICBpZiAoaWR4QmYgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaWR4QmY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZHhFc3RydWN0dXJhID0gYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MuZmluZEluZGV4KChpbmZvRm9ybXVsYXJpbykgPT4gaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gPT0gZm9ybXVsYXJpbyk7XHJcbiAgICAgICAgcmV0dXJuIGlkeEVzdHJ1Y3R1cmEgPj0gMCA/IDEwMDAgKyBpZHhFc3RydWN0dXJhIDogOTk5OTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIG9idGVuZXJQb3NpY2lvbkZvcm11bGFyaW9VYSA9ICh1YTogVW5pZGFkQW5hbGlzaXMpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgIHZhciBwb3NpY2lvbmVzID0gYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3NcclxuICAgICAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pID0+IGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhLnVuaWRhZF9hbmFsaXNpcylcclxuICAgICAgICAgICAgLm1hcCgoaW5mb0Zvcm11bGFyaW8pID0+IG9idGVuZXJQb3NpY2lvbkZvcm11bGFyaW8oaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKSk7XHJcbiAgICAgICAgcmV0dXJuIHBvc2ljaW9uZXMubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnBvc2ljaW9uZXMpIDogOTk5OTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGhpamFzRmlsdHJhZGFzWU9yZGVuYWRhcyA9IChsaWtlQXIodWFEZWYuaGlqYXMpKVxyXG4gICAgICAgIC5hcnJheSgpXHJcbiAgICAgICAgLmZpbHRlcigodWFIaWphKTogdWFIaWphIGlzIFVuaWRhZEFuYWxpc2lzID0+XHJcbiAgICAgICAgICAgIHVhSGlqYSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLnNvbWUoKGluZm9Gb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFIaWphLnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc29ydCgoYSwgYikgPT4gb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpb1VhKGEpIC0gb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpb1VhKGIpKTtcclxuXHJcbiAgICB2YXIgeCA9IGhpamFzRmlsdHJhZGFzWU9yZGVuYWRhcy5tYXAodWFIaWphID0+IChcclxuICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAndWEtaGlqYXMnIH0sIFtcclxuICAgICAgICAgICAgaHRtbC5kaXYodWFIaWphLnVuaWRhZF9hbmFsaXNpcyksXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KFxyXG4gICAgICAgICAgICAgICAgbGlrZUFyKHJbdWFIaWphLnVuaWRhZF9hbmFsaXNpc10gfHwgW10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JQa0hpamFQYXJjaWFsID0geyAuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sLmRpdih7IGNsYXNzOiAnbnVtZXJhZG9yLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdib3RvbmVzLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnbnVtZXJvLXVhJyB9LCBudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZvcm1EZWYgPT4gZm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcnJheSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG9idGVuZXJQb3NpY2lvbkZvcm11bGFyaW8oYS5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pIC0gb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpbyhiLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaW5mb0Zvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm11bGFyaW8gPSBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsgLi4uZm9yUGtIaWphUGFyY2lhbCwgZm9ybXVsYXJpbyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZWVkYmFja0Zvcm0gPyBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudWxsLCBmb3JtdWxhcmlvLCByKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGVzcGxpZWd1ZU9jdWx0YTogZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6ICcnLCBub21icmU6IGZvcm11bGFyaW8sIGFjbGFyYWNpb246IG51bGwsIHNhbHRvOiBmb3JtdWxhcmlvIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uY2FzaWxsZXJvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLCBib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgKSk7XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoLyp7c3R5bGU6J2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93J30sKi94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dG9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogVGV4dG8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgbW9kb0Rlc3BsaWVndWUgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm8gPT0gJ1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYgKGVzUmVzdW1lbkZvcm11bGFyaW8pIHtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYgKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIHNpbiBlbXBlemFyXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMgfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmFwcGVuZENoaWxkKGJvdG9uZXNEZWxGb3JtdWxhcmlvKHIsIHVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGssIGZlZWRiYWNrQWxsKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgdmFyIGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgLy8gdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgIC8vIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBkZWZCb3Rvbi5mb3JQayB9KTtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogZGVmQm90b24uZm9yUGssIGFwaWxhclZ1ZWx0YTogdHJ1ZSB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8gP1xyXG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGaWx0cm9EZXNwbGllZ3VlKHByb3BzOiB7IGZpbHRybzogRmlsdHJvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgZmlsdHJvIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ29uc2lzdGVuY2lhRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbnNpc3RlbmNpYSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyID1cclxuICAgICh7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQWdyZWdhcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBlc0NvbmZpcm1hcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBwZXJtaXRlQm9ycmFyOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogZmFsc2UsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBib29sZWFuLCB1bmljbzogdHJ1ZSB9KVxyXG4gICAgJiB7IGVzQ29uZmlybWFyPzogdHJ1ZSwgZXNBZ3JlZ2FyPzogdHJ1ZSwgcGVybWl0ZUJvcnJhcj86IGJvb2xlYW4sIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZT86IGJvb2xlYW4sIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZXN0YWRvQm90b24/OiBzdHJpbmcgfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLFxyXG4gICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgY2FzaWxsZXJvOiB7IGRlc3BsaWVndWVPY3VsdGE/OiBib29sZWFuIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86IHN0cmluZywgYWNsYXJhY2lvbjogc3RyaW5nIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcj86IHN0cmluZywgbm9tYnJlPzogc3RyaW5nLCBzYWx0bzogc3RyaW5nIHwgbnVsbCwgZXNwZWNpYWw/OiBhbnkgfSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246IHN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6IEZvcm11bGFyaW8sXHJcbiAgICBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8/OiAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrKSA9PiB2b2lkXHJcbikgPT4ge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspICsgKGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJy1saXN0bycgOiAnJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC50cih7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgY2xhc3M6IFwic2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgIFwibnVlc3Ryby12YWxpZGF0b3JcIjogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyAndmFsaWRhJyA6IChkZWZCb3Rvbi5lc3RhZG9Cb3RvbiB8fCAndG9kYXZpYV9ubycpLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjogY2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6IFwiTk9cIixcclxuICAgICAgICAgICAgXCJkZWYtYnV0dG9uXCI6IEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKVxyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgIGh0bWwudGQoeyBjbGFzczogXCJhY2xhcmFjaW9uXCIgfSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBodG1sLnRkKHtcclxuICAgICAgICAgICAgY29sc3BhbjogKGRlZkJvdG9uLmVzQWdyZWdhciB8fCBkZWZCb3Rvbi5lc0NvbmZpcm1hcikgP1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbi5sZW5ndGggPz8gMSkgKyAoY2FzaWxsZXJvLmFjbGFyYWNpb24gPyAwIDogMSlcclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAvLyBpZDpgdmFyLSR7aWRWYXJpYWJsZX1gLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudDogZGVmQm90b24uYWN0dWFsID8gXCJjb250YWluZWRcIiA6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcImluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24uZXNDb25maXJtYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXJSZXNwdWVzdGFzQm90b25Gb3JtdWxhcmlvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHRvOiBjYXNpbGxlcm8uc2FsdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzaW9uSGFiaWxpdGFyOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0b1ZhbG9yOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhclZhbG9yOiAxIGFzIFZhbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhclZhbG9yOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXN1bWVuLWVzdGFkb1wiOiBlc3RhZG8gIT0gJ3ZhY2lvJyA/IGVzdGFkbyA6IGRlZkJvdG9uLmFjdHVhbCA/ICdhY3R1YWwnIDogZGVmQm90b24ucHJldmlvID8gZXN0YWRvIDogKGRlZkJvdG9uLmVzdGFkb0JvdG9uIHx8ICd0b2RhdmlhX25vJyksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhciA/ICdhZ3JlZ2FyJyA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJ0xpc3RvJyA6IGNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtIHx8ICcnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiAoZGVmQm90b24uZXNBZ3JlZ2FyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5BZGQgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2sgOiBjYXNpbGxlcm8uc2FsdG8gPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQgOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCksIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIgfHwgZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdG86IGNhc2lsbGVyby5zYWx0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNpb25IYWJpbGl0YXI6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RvVmFsb3I6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FyVmFsb3I6IGRlZkJvdG9uLm51bSA9PT0gMSA/IChudWxsIGFzIHVua25vd24gYXMgVmFsb3IpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhclZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSAmJiBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbyhkZWZCb3RvbiwgZm9yUGtQYWRyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLmVzQ29uZmlybWFyICYmIGNhc2lsbGVyby5zYWx0byAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1snJEIuRjonICsgKGNhc2lsbGVyby5zYWx0by5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IGNhc2lsbGVyby5zYWx0by5zbGljZSgyKSA6IGNhc2lsbGVyby5zYWx0bykgYXMgSWRWYXJpYWJsZV0gIT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tZGVzaGFjZXItbGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXNoYWNlciBMaXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgbWFyZ2luTGVmdDogJzRweCcsIGhlaWdodDogJzIwcHgnLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHRvOiBjYXNpbGxlcm8uc2FsdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNpb25IYWJpbGl0YXI6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG9WYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhclZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YXJWYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXIgP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuID8/IFsvKmRlZkJvdG9uLm51bS50b1N0cmluZygpKi9dKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoY2FtcG86IHN0cmluZykgPT4gaHRtbC50ZCgocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bSAtIDFdW2NhbXBvIGFzIElkVmFyaWFibGVdID8/ICcnKS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAvLyBodG1sLmRpdih7Y2xhc3M6J2lubGluZS1kaWFsb2cnLCAkYXR0cnM6e1wiaW5saW5lLWRpYWxvZy1vcGVuXCI6IGNvbmZpcm1hckZvcnphcklyID09IGRlZkJvdG9uLm51bT8ndmlzaWJsZSc6J2hpZGRlbid9fSxbICAgICAgICAgICAgICAgIF0pXHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIF9pZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczogSWRGb3JtdWxhcmlvW10sIGZlZWRiYWNrQWxsOiB7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICBsZXQgbXlmb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGZvcm0gfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyLCBpZEZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpb0FBYnJpciB9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyIHwgZmFsc2UgfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbY29uZmlybWFjaW9uQm9ycmFkbywgc2V0Q29uZmlybWFjaW9uQm9ycmFkb10gPSB1c2VTdGF0ZTx7ZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrLCBkYXRvczogYW55fSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtmcmFzZUJvcnJhZG8sIHNldEZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICB2YXIgW2Vycm9yRnJhc2VCb3JyYWRvLCBzZXRFcnJvckZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICB2YXIgcGVybWl0ZUJvcnJhckdhYmluZXRlID0gZ2V0RGF0b3NCeVBhc3MoKS5wZXJtaXRlQm9ycmFyRWxlbWVudG9zVUEgPz8gZmFsc2U7XHJcbiAgICB2YXIgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlKVxyXG4gICAgICAgIHZhciBkYXRvc0hpam9zID0gcmVzcHVlc3Rhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bKGRlZkJvdG9uLm51bSB8fCAxKSAtIDFdO1xyXG4gICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8oeyBkZWZCb3RvbiwgZm9yUGtQYWRyZSwgZGF0b3M6IGRhdG9zSGlqb3MgfSk7XHJcbiAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3MgPSBmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGlkU2VjY2lvbiA9IGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtCRl9saXN0b31gO1xyXG4gICAgdmFyIGlkQnV0dG9uID0gYHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICB2YXIgdmFyX25hbWVfcmVnaXN0cm8gPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gQkZfYWdyZWdhciA6IEJGX2xpc3RvO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDogaWRTZWNjaW9uLFxyXG4gICAgICAgIHZhcmlhYmxlOiB2YXJfbmFtZV9yZWdpc3RybyxcclxuICAgICAgICBmb3JQazogZm9yUGssXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19saXN0byA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXT8uZXN0YWRvIHx8ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19hZ3JlZ2FyID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IChmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9hZ3JlZ2FyXT8uZXN0YWRvIHx8ICd2YWxpZGEnKSA6ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19nZW5lcmFsID0gZXN0YWRvX2FncmVnYXIgIT09ICd2YWxpZGEnID8gZXN0YWRvX2FncmVnYXIgOiBlc3RhZG9fbGlzdG87XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG9fZ2VuZXJhbCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAndGllbmUtdmFsb3InLCBlc3RhZG9fZ2VuZXJhbCA9PT0gJ3ZhbGlkYScgPyAndmFsaWRvJyA6ICdOTycpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9ICEhZmVlZGJhY2tSb3cuYWN0dWFsPy5zdGFydHNXaXRoKEJGX2xpc3RvKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTogbnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyR2FiaW5ldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhZG9Cb3RvbjogZXN0YWRvX2dlbmVyYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUgLypcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIqLyAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrID0gKGNvbmp1bnRvID09IG51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudWV2b1ZhbG9yUGsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RvUHJlc2lvbmFkbyA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW0JGX2xpc3RvXSAhPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9IG51bGwgJiYgY29uanVudG8ubGVuZ3RoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICFsaXN0b1ByZXNpb25hZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGsgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXNQcmV2aW9VbmljbyA9IGVzdGFkb19nZW5lcmFsID09ICd2YWxpZGEnIHx8IChmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXT8ucmVzdW1lbiAhPSBudWxsICYmIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldPy5yZXN1bWVuICE9ICd2YWNpbycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbeyBmb3JQaywgbnVtOiBmYWxzZSwgdW5pY286IHRydWUsIGFjdHVhbDogZXNWYXJBY3R1YWwsIHByZXZpbzogZXNQcmV2aW9VbmljbywgZXN0YWRvQm90b246IGVzdGFkb19nZW5lcmFsIH1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b24gPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXSA/PyB7IHJlc3VtZW46ICd2YWNpbycgfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyLCBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG9cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBsZXQgbm9tYnJlc0NhbXBvc1Jlc3VtZW4gPSBsaWtlQXIoKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbiB8fCBbXSkpLmFycmF5KCkubWFwKGMgPT4gYyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHRtbFNlY2Npb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFNlY2Npb24pITtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLnRhYmxlKHsgY2xhc3M6IGB0YWJsZSB0YWJsZS1zdHJpcGVkICR7bm9tYnJlc0NhbXBvc1Jlc3VtZW4ubGVuZ3RoID8gJ3ctYXV0bycgOiAnJ31gIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRoZWFkKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50cihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IGh0bWwudGgoKSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRoKGNhc2lsbGVyby5ub21icmUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubm9tYnJlc0NhbXBvc1Jlc3VtZW4ubWFwKChub21icmVDYW1wbykgPT4gaHRtbC50aChub21icmVDYW1wbyBhcyBzdHJpbmcpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRib2R5KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9kb3NMb3NCb3RvbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSAnZXN0bywgRkFMTMOJICcgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBpciA9IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcikgPT4ge1xyXG4gICAgICAgIGlmICghY2FzaWxsZXJvLnNhbHRvKSB7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbnVldmFGb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgIGlmIChtdWx0aXBsZUZvcm11bGFyaW9zKSB7XHJcbiAgICAgICAgICAgICAgICAobnVldmFGb3JQayBhcyBhbnkpW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5lc0FncmVnYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBudWV2YUZvclBrIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlOiBwcm9wcy5mb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FsdG86IGNhc2lsbGVyby5zYWx0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzaW9uSGFiaWxpdGFyOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG9WYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FyVmFsb3I6IDEgYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhclZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3JcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgYWJybyB1bm8gZXhpc3RlbnRlLCB0YW1iacOpbiByZXNldGVvIGVsIGxpc3RvIHBhcmEgZm9yemFyIHF1ZSB2dWVsdmFuIGEgYXByZXRhcmxvIHNpIGNhbWJpYW4gYWxnb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogMSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogbnVldmFGb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpcm1hckZvcnphcklyKSB7IHNldENvbmZpcm1hckZvcnphcklyKGZhbHNlKSB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIHttdWx0aXBsZUZvcm11bGFyaW9zICYmIDxzcGFuIGlkPXsndmFyLScgKyBCRl9hZ3JlZ2FyfSBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbWFyZ2luVG9wOiAnLTYwcHgnIH19Pjwvc3Bhbj59XHJcbiAgICAgICAgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2xpc3RvfSBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbWFyZ2luVG9wOiAnLTYwcHgnIH19Pjwvc3Bhbj5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiXHJcbiAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFyRm9yemFySXJ9XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IGNvbmZpcm1hckZvcnphcklyICYmIGlyKGNvbmZpcm1hckZvcnphcklyKX0+Zm9yemFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IHNldENvbmZpcm1hckZvcnphcklyKG51bGwpfT5FbnRlbmRpZG88L0J1dHRvbj5cclxuICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICB7Y29uZmlybWFjaW9uQm9ycmFkbyAmJiAoXHJcbiAgICAgICAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25DbG9zZT17KCkgPT4geyBcclxuICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7IFxyXG4gICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTsgXHJcbiAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7IFxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5BZHZlcnRlbmNpYTogU2UgcGVyZGVyw6FuIGRhdG9zPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2BFc3TDoSBwb3IgYm9ycmFyIGVsIGZvcm11bGFyaW8gJHtjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLmZvclBrLmZvcm11bGFyaW99ICgke2VzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLmZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXS5wa19hZ3JlZ2FkYX06ICR7Y29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5udW19KS4gTG9zIGRhdG9zIGRlbCBtaXNtbyB5IHRvZG9zIHN1cyByZWdpc3Ryb3MgYXNvY2lhZG9zIHNlIHBlcmRlcsOhbi4gwr9EZXNlYSBjb250aW51YXI/YH1cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMjBweCcsIG1hcmdpbkJvdHRvbTogJzIwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhIGNvbmZpcm1hciBlbCBib3JyYWRvLCBlc2NyaWJhIGxhIGZyYXNlIDxzdHJvbmc+XCJmb3J6YXIgYm9ycmFkb1wiPC9zdHJvbmc+IGEgY29udGludWFjacOzbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbnB1dC1mb3J6YXItYm9ycmFkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ZyYXNlQm9ycmFkb30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICcxMDAlJywgcGFkZGluZzogJzhweCcsIGJvcmRlcjogZXJyb3JGcmFzZUJvcnJhZG8gPyAnMXB4IHNvbGlkIHJlZCcgOiAnMXB4IHNvbGlkICNjY2MnLCBib3JkZXJSYWRpdXM6ICc0cHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZm9yemFyIGJvcnJhZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yRnJhc2VCb3JyYWRvICYmIDxkaXYgc3R5bGU9e3tjb2xvcjogJ3JlZCcsIG1hcmdpblRvcDogJzVweCcsIGZvbnRTaXplOiAnMC44NWVtJ319PkxhIGZyYXNlIGluZ3Jlc2FkYSBlcyBpbmNvcnJlY3RhLjwvZGl2Pn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMTBweCcsIGZvbnRXZWlnaHQ6ICdib2xkJyB9fT5EYXRvcyBxdWUgc2UgcGVyZGVyw6FuOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1heFdpZHRoOiAnNjAwcHgnLCBtYXJnaW46ICcwIGF1dG8nLCBmb250RmFtaWx5OiAnc2Fucy1zZXJpZicgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSZW5kZXJpemFkb3JKU09OIGRhdG9zPXtjb25maXJtYWNpb25Cb3JyYWRvLmRhdG9zfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1hY2lvbkJvcnJhZG8pIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFzZUJvcnJhZG8udHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09IFwiZm9yemFyIGJvcnJhZG9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dC1mb3J6YXItYm9ycmFkbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2RlZkJvdG9uLCBmb3JQa1BhZHJlfSA9IGNvbmZpcm1hY2lvbkJvcnJhZG87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7IGZvclBrLCBmb3JQa1BhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXJSZXNwdWVzdGFzQm90b25Gb3JtdWxhcmlvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0bzogY2FzaWxsZXJvLnNhbHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzaW9uSGFiaWxpdGFyOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RvVmFsb3I6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFncmVnYXJWYWxvcjogZGVmQm90b24ubnVtID09PSAxID8gKG51bGwgYXMgdW5rbm93biBhcyBWYWxvcikgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YXJWYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0+Qm9ycmFyIGRlIHRvZGFzIGZvcm1hczwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOiB7IGNhc2lsbGVybzogQ2FzaWxsZXJvQmFzZSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2BjYXNpbGxlcm9kZXNjb25vY2lkby0ke3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBCbG9xdWV9XHJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+VGlwbyBkZSBjYXNpbGxlcm8gbm8gaW1wbGVtZW50YWRvOiBcIntwcm9wcy5jYXNpbGxlcm8udGlwb2N9XCIgcGFyYSBcIntwcm9wcy5jYXNpbGxlcm8uY2FzaWxsZXJvfVwiPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBDYXNpbGxlcm9FbmNhYmV6YWJsZX0gbGVlcj17ZmFsc2V9IGZvclBrPXtwcm9wcy5mb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOiBGb3JQaykge1xyXG4gICAgcmV0dXJuIHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiB7XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLFxyXG4gICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZTogc3RhdGUub3BjaW9uZXMubW9kb0Rlc3BsaWVndWUsXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIGxldCB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYGNvbmp1bnRvLXByZWd1bnRhcy0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/IDxEZXNwbGVnYXJDYXNpbGxlcm8gaWQ9e2lkfSBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IGxlZXI9e2Nhc2lsbGVyby5sZWVyICE9PSBmYWxzZX0gLz5cclxuICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+IDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvKHByb3BzOiB7IGJsb3F1ZU9Gb3JtdWxhcmlvOiBCbG9xdWUgfCBGb3JtdWxhcmlvIHwgQ29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQaywgbXVsdGlwbGU6IGJvb2xlYW4gfSkge1xyXG4gICAgdmFyIHBhcmNpYWxpemFibGUgPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvIHwgbnVsbD4obnVsbCk7XHJcbiAgICBpZiAocGFyY2lhbGl6YWJsZSkge1xyXG4gICAgICAgIGlmIChmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pIHtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFZlclRvZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sIDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJykge1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKSwgdmVyVG9kb10pXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRicgJiYgdmVyVG9kbykge1xyXG4gICAgICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmcgfCBudWxsLCBzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmcgfCBudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW4gPT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICB7dmVyVG9kbyA/IG51bGwgOiA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCI1MDBweFwiLCB0ZXh0QWxpZ246ICdjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJywgd2lkdGg6ICcxMDAlJywgcG9zaXRpb246IFwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6ICcyMDAlJyB9fSA+Y2FyZ2FuZG8uLi48L2Rpdj59XHJcbiAgICAgICAge3Byb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MubWFwKChjYXNpbGxlcm8sIGkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYyArICctJyArIGNhc2lsbGVyby5pZF9jYXNpbGxlcm8gKyAnLScgKyBpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiID8gPFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/IChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnQ1AnID8gJ2xhdGVyYWwnIDogJ3N1cGVyaW9yJyl9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQlwiID8gPEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkZJTFRST1wiID8gPEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiID8gPEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ09OU1wiID8gPENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNQXCIgPyA8Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIiA/IDxUZXh0b0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUE1BVFJJWlwiID8gPFBNYXRyaXpEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiID8gPExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXNpbGxlcm9EZXNjb25vY2lkbyBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogaSA9PSBsaW1pdGVOb1ZlclRvZG8gP1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOiB7IGJsb3F1ZTogQmxvcXVlLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgYmxvcXVlLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5ID0gYmxvcXVlLnZlcl9pZCAhPSAnLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXAgPSAwO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3sgZm9yUGssIGtleTogMCwgbXVsdGlwbGU6IGZhbHNlIH1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAvLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXHJcbiAgICAgICAgLy8gbGlzdGE9cmVzcHVlc3Rhcy5wZXJzb25hcy5tYXAoKF9wZXJzb25hLCBpKT0+KFxyXG4gICAgICAgIC8vICAgICB7Zm9yUGs6ey4uLmZvclBrLCBwZXJzb25hOmkrMX0sIGtleTppKzEsIG11bHRpcGxlOnRydWV9XHJcbiAgICAgICAgLy8gKSlcclxuICAgIH1cclxuICAgIHZhciBpZCA9IGBibG9xdWUtJHtibG9xdWUuaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgc3R5bGU6ICdkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyZXNwdWVzdGFzKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICd1bnNldCcgOiAnbm9uZSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Jsb3F1ZX0gbnVlc3Ryby1ibG9xdWU9e2Jsb3F1ZS5pZF9jYXNpbGxlcm99IGVzLW11bHRpcGxlPXttdWx0aXBsZSA/ICdTSScgOiAnTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgICAgIHtsaXN0YS5tYXAoKHsga2V5LCBmb3JQaywgbXVsdGlwbGUgfSkgPT5cclxuICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBrZXk9e2tleX0gYmxvcXVlT0Zvcm11bGFyaW89e2Jsb3F1ZX0gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17bXVsdGlwbGV9IC8+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjtcclxufVxyXG5cclxuY29uc3QgRm9ybXVsYXJpb0VuY2FiZXphZG8gPSBEZXNwbGllZ3VlRW5jYWJlemFkbztcclxuXHJcbmZ1bmN0aW9uIE1lbnVMZXRyYShwcm9wczogeyB0YW1hbm5pbzogbnVtYmVyLCBkZW5vbWluYWNpb246IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBjYW1iaWFyTGV0cmEgPSAodGFtYW5uaW86IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJvb3Quc3R5bGUuZm9udFNpemUgPSB0YW1hbm5pbyArIFwicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyTGV0cmEocHJvcHMudGFtYW5uaW8pfSBzdHlsZT17eyBmb250U2l6ZTogcHJvcHMudGFtYW5uaW8gKyAncHgnIH19XHJcbiAgICA+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczogeyBmb3JQazogRm9yUGssIHNvbG9MZWN0dXJhOiBib29sZWFuLCBtb2RvRGlyZWN0bzogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3QgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW4gfCBudWxsPihmYWxzZSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIHZhciB0YXJlYSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoL15cXCMvLCcnKS5zcGxpdCgnJmF1dG9wcm9jZWQnKVswXSk7XHJcbiAgICAgICAgLy8vL2hhc2guZGVsZXRlKCdhdXRvcHJvY2VkJylcclxuICAgICAgICAvL2Nsb3NlKCk7XHJcbiAgICAgICAgLy9sb2NhdGlvbi5oYXNoPWhhc2gudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHZhciBib3RvbmVzRm9ybXVsYXJpbyA9IFtdO1xyXG4gICAgaWYgKCFvcGNpb25lcy5tb2RvRGlyZWN0bykge1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICdoZHInLCBhYnI6ICdIZFInLCBpZDogSURfQk9UT05fVk9MVkVSX0hEUiwgbGFiZWw6ICdIb2phIGRlIFJ1dGEnLCByZXRyb2Nlc286IDAgfSlcclxuICAgIH1cclxuICAgIG9wY2lvbmVzLnBpbGFGb3JQay5mb3JFYWNoKChmb3JQaywgaSkgPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAndm9sdmVyJywgYWJyOiBmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sICcnKSwgbGFiZWw6IGZvclBrLmZvcm11bGFyaW8sIHJldHJvY2Vzbzogb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIGkgfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICcnLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiAwIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOiBwcm9wcy5tb2RvRGlyZWN0byA/IElEX0JPVE9OX0NFUlJBUiA6IElEX0JPVE9OX1ZPTFZFUl9IRFIsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bWVuRXN0YWRvID0gZ2V0UmVzdW1lbkVzdGFkb0ZvclRhcmVhKHIgYXMgUmVzcHVlc3Rhc1JhaXosIHRhcmVhIGFzIElkVGFyZWEpXHJcbiAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCByZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTogTW9kb0Rlc3BsaWVndWUpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoeyBtb2RvRGVzcGxpZWd1ZSB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwiZm9ybXVsYXJpb3NcIiBjbGFzc05hbWU9XCJiYXJyYS1uYXZlZ2FjaW9uXCIgc29sby1sZWN0dXJhPXtwcm9wcy5zb2xvTGVjdHVyYSA/ICdzaScgOiAnbm8nfSA+XHJcbiAgICAgICAgICAgIHtib3RvbmVzRm9ybXVsYXJpby5tYXAoKGIsIGkpID0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPXtiLnF1ZSA9PSBmb3JQay5mb3JtdWxhcmlvID8gXCJwcmltYXJ5XCIgOiBcImluaGVyaXRcIn0gdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD17Yi5pZH1cclxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l9LSR7Yi5xdWV9LSR7Yi5yZXRyb2Nlc299YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWIucXVlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZSA9PSAnaGRyJyA/IGRpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7IG1hZ25pdHVkUmV0cm9jZXNvOiBiLnJldHJvY2VzbyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZSA9PSAnaGRyJyA/IG51bGwgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gYi5yZXRyb2Nlc29dIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJyXCI+e2IuYWJyfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICB7Yi5xdWUgPT0gJ2hkcicgPyA8SUNPTi5Bc3NpZ25tZW50IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPntiLmxhYmVsfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhID8gPFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMTBweCcgfX0+IChTb2xvIExlY3R1cmEpIDwvVHlwb2dyYXBoeT4gOiBudWxsfVxyXG4gICAgICAgIHtwcm9wcy5tb2RvRGlyZWN0byA/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwidm9sdmVyX3lfZ3JhYmFyXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAwIDAgMzBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17SURfQk9UT05fQ0VSUkFSfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuc29sb0xlY3R1cmEgfHwgIWdldERpcnR5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5FeGl0VG9BcHAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFDZXJyYXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFjZSBxdWUgbm8gc2UgY2llcnJlIGVsIG1lbnNhamVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJhbGVydC1kaWFsb2ctdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBpZD1cImFsZXJ0LWRpYWxvZy10aXRsZVwiPkNvbmZpcm1lIGNpZXJyZSBkZSBlbmN1ZXN0YTwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IGlkPVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXN0w6EgcG9yIHNhbGlyIGRlIGxhIGVuY3Vlc3RhLCBzZSBwZXJkZXLDoW4gbG9zIGNhbWJpb3Mgbm8gZ3VhcmRhZG9zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2FydGFyIGNhbWJpb3MgeSBjZXJyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhciBlZGl0YW5kbyBlbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtcInNhdmUtYnV0dG9uXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4gdHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU2F2ZSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT1cIm1vc3RyYXItZm9yUGtcIiBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAxMHB4JyB9fT5cclxuICAgICAgICAgICAge1ZFUl9ET01JTklPID8gPGRpdiBrZXk9e2RvbWluaW99PjxzcGFuPmRvbWluaW88L3NwYW4+PHNwYW4+e2RvbWluaW99PC9zcGFuPjwvZGl2PiA6ICcnfVxyXG4gICAgICAgICAgICB7bGlrZUFyKHByb3BzLmZvclBrKS5maWx0ZXIoKF8sIGspID0+IGsgIT0gJ2Zvcm11bGFyaW8nKS5tYXAoKHYsIGspID0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17a30+PHNwYW4+e2t9PC9zcGFuPjxzcGFuPnt2fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RmFzdFNldHVwPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcInJlbGV2YW1pZW50b1wiKX0+bm9ybWFsPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJQREZcIil9PlBERiBwYXJhIHJlbGV2YW1pZW50bzwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwibWV0YWRhdG9zXCIpfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezEyfSBkZW5vbWluYWNpb249XCJtdXkgY2hpY2FcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uPVwiY2hpY2FcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNn0gZGVub21pbmFjaW9uPVwibm9ybWFsXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTl9IGRlbm9taW5hY2lvbj1cImdyYW5kZVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb249XCJlbm9ybWVcIiAvPlxyXG4gICAgICAgICAgICA8RGl2aWRlciAvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnY29uQ2FtcG9PcGNpb25lcycsIHZhbG9yOiAhb3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcyB9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19IC8+Y2FtcG8gb3BjaW9uZXM8L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLnNhbHRvQXV0b21hdGljb30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3NhbHRvQXV0b21hdGljbycsIHZhbG9yOiAhb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvIH0pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0gLz5zYWx0byBhdXRvbcOhdGljbzwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICA8L0Zhc3RTZXR1cD5cclxuICAgIDwvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvblZvbHZlckVuRGl2KHsgaWQgfTogeyBpZDogc3RyaW5nIH0pIHtcclxuICAgIHZhciB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzIH0pKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGl2LWJvdG9uLXZvbHZlclwiPlxyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXNWb2x2ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSAxXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7IG1hZ25pdHVkUmV0cm9jZXNvOiAxIH0pKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYm90b25DZXJyYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9DRVJSQVIpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX1ZPTFZFUl9IRFIpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdG9uQ2VycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uQ2VycmFyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQgLz57ZXNWb2x2ZXIgPyBcIiBWb2x2ZXJcIiA6IFwiIENlcnJhclwifTwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOiB7IGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG9wY2lvbmVzIH1cclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgY29uc3QgdGFyZWEgPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2dldEVzdHJ1Y3R1cmEoKS5wa0FncmVnYWRhVWFQcGFsXV0udGFyZWEudGFyZWE7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYXJyaWJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJyk7XHJcbiAgICAgICAgICAgIGlmIChhcnJpYmEpIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9IG51bGwgJiYgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgKyAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWJham8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpO1xyXG4gICAgICAgICAgICBpZiAoYWJham8pIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZENhc28gPSBsaWtlQXIoZm9yUGspLmZpbmQoKF8sIGspID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGsgIT0gJ2Zvcm11bGFyaW8nXHJcbiAgICAgICAgfSk/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnRpdGxlID0gZ2V0RXN0cnVjdHVyYSgpLm9wZXJhdGl2byArICctICcgKyBpZENhc287XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIGNvbnRyb2xTY3JvbGwoKTtcclxuICAgICAgICBjYWxjdWxhckNvbW9kaW5lcyhmb3JQayk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyBUT0RPIFZvbHZlciBhIHBvbmVyIGVsIG1vdmltaWVudG8gYSBsYSBhY3R1YWxcclxuICAgIHZhciBhY3R1YWw6IGFueVxyXG4gICAgdmFyIGNvbXBsZXRvOiBhbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciB7IHZhcmlhYmxlQWN0dWFsIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCkge1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOiBNb2RvRGVzcGxpZWd1ZVtdID0gWydtZXRhZGF0b3MnLCAncmVsZXZhbWllbnRvJywgJ1BERiddO1xyXG4gICAgWydib3Rvbi12b2x2ZXItMScsICdib3Rvbi12b2x2ZXItMiddLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdW1lbkVzdGFkbyA9IGdldFJlc3VtZW5Fc3RhZG9Gb3JUYXJlYShyIGFzIFJlc3B1ZXN0YXNSYWl6LCB0YXJlYSBhcyBJZFRhcmVhKVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGVzVm9sdmVyID8gZmVlZGJhY2tGb3JtLnJlc3VtZW4gOiByZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhclByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmF9XHJcbiAgICAgICAgICAgICAgICBiYXJyYU5hdkZvcm11bGFyaW89e1xyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfSAvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyUHJpbmNpcGFsPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcyA/ICdTSScgOiAnTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0xXCIgLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30gLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiIC8+fVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYXJyaWJhJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd1VwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYWJham8nIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93RG93biAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYXJyaWJhJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQayA/IDxEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEgZm9yUGs9e29wY2lvbmVzLmZvclBrfSB2YXJpYWJsZUJvcnJhcj17b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YX0gLz4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXRyaWJ1dG8ocHJvcHM6IHsgbm9tYnJlOiBzdHJpbmcsIHZhbG9yOiBhbnkgfSkge1xyXG4gICAgcmV0dXJuIHByb3BzLnZhbG9yICE9IG51bGwgJiYgcHJvcHMudmFsb3IgIT0gJycgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1wYXJcIj5cclxuICAgICAgICB7cHJvcHMubm9tYnJlID8gPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+IDogbnVsbH1cclxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by12YWxvclwiPntwcm9wcy52YWxvci50b1N0cmluZygpfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj4gOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBsaXN0YUVzdGFkb3NDYXJnYTogRXN0YWRvQ2FyZ2FbXSA9IFsncmVzdW1lbicsICdyZWxldmFtaWVudG8nLCAncmVjaWJvJ107XHJcbmV4cG9ydCB2YXIgcmVzdW1pZG9yZXMgPSBbXHJcbiAgICB7IG5vbWJyZTogJ1JFQScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJva1wiIH0sXHJcbiAgICB7IG5vbWJyZTogJ0NpdGEgcGFjdGFkYScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJjaXRhIHBhY3RhZGFcIiB9LFxyXG4gICAgeyBub21icmU6ICdQZW5kaWVudGVzJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcInZhY2lvXCIgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7IG5vbWJyZTogJ090cm9zJywgZjogcmVzdW1pZG9yZXMucmVkdWNlKChnLCByKSA9PiAocnIgPT4gIXIuZihycikgJiYgZyhycikpLCAoXzogUmVzcHVlc3Rhc1JhaXopID0+IHRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlID0gKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSAobGluZWFSZXN1bWVuVUFQcmluY2lwYWw6IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZSkgPT4gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSBsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDtcclxuXHJcbnNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKChwcm9wczoge1xyXG4gICAgbnVtVml2aWVuZGE6IElkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDogSWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNSYWl6LFxyXG59KSA9PiB7XHJcbiAgICBjb25zdCB7IG51bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYSB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZCA9ICd2aXYtJyArIG51bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGZvclBrOiBGb3JQayA9IHsgZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IE51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmMgfSBhcyBGb3JQazsgLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbiAgICB2YXIgdGVtID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltudW1WaXZpZW5kYV0udGVtO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQayk7XHJcbiAgICB9LCBbbnVtVml2aWVuZGEsIGZvcm1QcmluY2lwYWxdKVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhXHJcbiAgICAgICAgICAgIC8vY29uIHRvZGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHJlc3B1ZXN0YXMgcGFyYSBjYWRhIGZvclBrXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSB2aXZpZW5kYSBleGlzdGVcclxuICAgICAgICAgICAgaWYgKHJbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bWVuRXN0YWRvID0gZ2V0UmVzdW1lbkVzdGFkb0ZvclRhcmVhKHIgYXMgUmVzcHVlc3Rhc1JhaXosIHRhcmVhIGFzIElkVGFyZWEpXHJcbiAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCByZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtID9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzcHVlc3Rhc1sncmVzdW1lbkVzdGFkbycgYXMgSWRWYXJpYWJsZV0gPT0gXCJjaXRhIHBhY3RhZGFcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQaywgYXBpbGFyVnVlbHRhOiBmYWxzZSB9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn0pO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyQ2FyZ2FUeXBlID0gKHByb3BzOiB7XHJcbiAgICBjYXJnYTogQ2FyZ2EsXHJcbiAgICBpZENhcmdhOiBJZENhcmdhLFxyXG4gICAgcG9zaWNpb246IG51bWJlcixcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkcixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YUxhc1VBLFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj5cclxuICAgIH1cclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIERlc3BsZWdhckNhcmdhOiBEZXNwbGVnYXJDYXJnYVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXREZXNwbGVnYXJDYXJnYSA9IChkZXNwbGllZ3VlQ2FyZ2E6IERlc3BsZWdhckNhcmdhVHlwZSkgPT4gRGVzcGxlZ2FyQ2FyZ2EgPSBkZXNwbGllZ3VlQ2FyZ2E7XHJcblxyXG5zZXREZXNwbGVnYXJDYXJnYSgocHJvcHM6IHtcclxuICAgIGNhcmdhOiBDYXJnYSxcclxuICAgIGlkQ2FyZ2E6IElkQ2FyZ2EsXHJcbiAgICBwb3NpY2lvbjogbnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6IEluZm9ybWFjaW9uSGRyLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPlxyXG4gICAgfVxyXG59KSA9PiB7XHJcbiAgICBjb25zdCB7IGNhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3RhcyB9ID0gcHJvcHM7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGxldCBjYW50TGluZWFzUmVzdW1lbiA9IGxpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbikgPT4gaW5mb3JtYWNpb24udGVtLmNhcmdhID09IGlkQ2FyZ2EpLmFycmF5KCkubGVuZ3RoO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2EgPT0gbnVsbCAmJiAhcHJvcHMucG9zaWNpb24gfHwgY2FyZ2EuZXN0YWRvX2NhcmdhID09ICdyZWxldmFtaWVudG8nID9cclxuICAgICAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiNzUlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjEwJVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCIxNSVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAgICAgIHtjYW50TGluZWFzUmVzdW1lbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17eyBmb250U2l6ZTogXCIxLjJyZW1cIiB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD50YXJlYTwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pID0+IGluZm9ybWFjaW9uLnRlbS5jYXJnYSA9PSBpZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FyZ2EucHVlZGVfYXV0b2dlbmVyYXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhLW51ZXZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBjb2xTcGFuPXszfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17bW9kb0RNID09IFwiY2FwYVwiID8gXCJzdWNjZXNzXCIgOiBcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXJFbmN1ZXN0YShpZENhcmdhLCAoZm9yUGtSYWl6OiBGb3JQa1JhaXopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IGZvclBrUmFpeiwgYXBpbGFyVnVlbHRhOiBmYWxzZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uQWRkIC8+IE51ZXZvIGN1ZXN0aW9uYXJpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICAgICAgPC9UYWJsZT4gOlxyXG4gICAgICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEuMnJlbVwiIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkge1xyXG4gICAgY29uc3QgeyByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfSAvPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmxldCBvcmRlblBvckRlZmVjdG9HbG9iYWw6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogUGVybWl0ZSBhIGxhIGFwcCBmaW5hbCAoZWouIGdncykgZGVmaW5pciBlbCBvcmRlbiBwb3IgZGVmZWN0b1xyXG4gKiBwYXJhIGxvcyBhdHJpYnV0b3MgZGUgbGEgY2l0YS9zZWxlY2Npb25hZG8gYW50ZXJpb3IuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0T3JkZW5Qb3JEZWZlY3RvQXRyaWJ1dG9zKG9yZGVuOiBzdHJpbmdbXSkge1xyXG4gICAgb3JkZW5Qb3JEZWZlY3RvR2xvYmFsID0gb3JkZW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczogeyB0ZW06IFRFTSB9KSB7XHJcbiAgICBjb25zdCB7IGNpdGEgfSA9IHByb3BzLnRlbTtcclxuXHJcbiAgICBpZiAoIWNpdGEpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCBjaXRhT2JqZXRvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjaXRhID09PSAnc3RyaW5nJyAmJiAoY2l0YS5zdGFydHNXaXRoKCd7JykgfHwgY2l0YS5zdGFydHNXaXRoKCdbJykpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjaXRhKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIHBhcnNlZCAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjaXRhT2JqZXRvID0gcGFyc2VkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBObyBlcmEgdW4gSlNPTiB2w6FsaWRvXHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2l0YSA9PT0gJ29iamVjdCcgJiYgY2l0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNpdGFPYmpldG8gPSBjaXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjbGF2ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgaWYgKGNpdGFPYmpldG8pIHtcclxuICAgICAgICBjb25zdCB0b2Rhc0xhc0NsYXZlcyA9IE9iamVjdC5rZXlzKGNpdGFPYmpldG8pLmZpbHRlcigoaykgPT4gayAhPT0gJ29yZGVuJyk7XHJcblxyXG4gICAgICAgIC8vIFByaW9yaXR5IDE6ICdvcmRlbicgZGVudHJvIGRlbCBKU09OIGluZGl2aWR1YWxcclxuICAgICAgICAvLyBQcmlvcml0eSAyOiAnb3JkZW4nIGdsb2JhbCBpbnllY3RhZG8gcG9yIGxhIGFwcCBmaW5hbFxyXG4gICAgICAgIC8vIFByaW9yaXR5IDM6IG51bGwgKG9yZGVuIG5vIGRldGVybWluw61zdGljbyAvIHRhbCBjb21vIHZpZW5lbiBsYXMga2V5cylcclxuICAgICAgICBjb25zdCBvcmRlbkVzcGVjaWZpY28gPSBBcnJheS5pc0FycmF5KGNpdGFPYmpldG8ub3JkZW4pID8gY2l0YU9iamV0by5vcmRlbiA6IG51bGw7XHJcbiAgICAgICAgY29uc3Qgb3JkZW5BcGxpY2FyID0gb3JkZW5Fc3BlY2lmaWNvIHx8IG9yZGVuUG9yRGVmZWN0b0dsb2JhbDtcclxuXHJcbiAgICAgICAgaWYgKG9yZGVuQXBsaWNhciAmJiBvcmRlbkFwbGljYXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjbGF2ZXMgPSB0b2Rhc0xhc0NsYXZlcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZHhBID0gb3JkZW5BcGxpY2FyLmluZGV4T2YoYSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZHhCID0gb3JkZW5BcGxpY2FyLmluZGV4T2YoYik7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zQSA9IGlkeEEgIT09IC0xID8gaWR4QSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zQiA9IGlkeEIgIT09IC0xID8gaWR4QiA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwb3NBIC0gcG9zQjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2xhdmVzID0gdG9kYXNMYXNDbGF2ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICB7Y2l0YU9iamV0byA/IChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZW0tY2l0YS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzhweCAxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGF2ZXMubWFwKChjbGF2ZSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17Y2xhdmV9IHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEF0cmlidXRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlPXtgJHtjbGF2ZX06YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxvcj17Y2l0YU9iamV0byFbY2xhdmVdfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXtjaXRhfSAvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhclRlbShwcm9wczogeyB0ZW06IFRFTSB9KSB7XHJcbiAgICBjb25zdCB7IHRlbSB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1kb21pY2lsaW9cIj57dGVtLm5vbWNhbGxlfSB7dGVtLm5yb2NhdGFzdHJhbH0gPEF0cmlidXRvIG5vbWJyZT1cInBpc29cIiB2YWxvcj17dGVtLnBpc299IC8+IDxBdHJpYnV0byBub21icmU9XCJkcHRvXCIgdmFsb3I9e3RlbS5kZXBhcnRhbWVudG99IC8+IDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJzZWN0b3JcIiB2YWxvcj17dGVtLnNlY3Rvcn0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVkaWZpY2lvXCIgdmFsb3I9e3RlbS5lZGlmaWNpb30gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImNhc2FcIiB2YWxvcj17dGVtLmNhc2F9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlbnRyYWRhXCIgdmFsb3I9e3RlbS5lbnRyYWRhfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiaGFiaXRhY2lvblwiIHZhbG9yPXt0ZW0uaGFiaXRhY2lvbn0gLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1vYnNlcnZhY2lvbmVzXCI+XHJcbiAgICAgICAgICAgIHt0ZW0ub2JzZXJ2YWNpb25lc31cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGFuZGxlTG9nb3V0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkub25Mb2dvdXQoKTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFwcEJhclByaW5jaXBhbFByb3BzID0ge1xyXG4gICAgdGl0dWxvPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgYmFycmFOYXZGb3JtdWxhcmlvPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgbW9kb0RNOiBNb2RvRE07XHJcbiAgICBzb2xvTGVjdHVyYT86IGJvb2xlYW47XHJcbiAgICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBCYXJQcmluY2lwYWwocHJvcHM6IEFwcEJhclByaW5jaXBhbFByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgdmFyIGNvbG9yOiAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdwcmltYXJ5JyA9IHByb3BzLnNvbG9MZWN0dXJhID8gJ3NlY29uZGFyeScgOiBwcm9wcy5tb2RvRE0gPT09ICdjYXBhJyA/ICdzdWNjZXNzJyA6ICdwcmltYXJ5JztcclxuICAgIHZhciB7IGZvclBrLCBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IG1vc3RyYXJCb3RvbmVyYU5hdmVnYWNpb24gPSBwYW50YWxsYUFjdHVhbCAmJiBwYW50YWxsYUFjdHVhbCAhPT0gJ3NpbmNyb25pemFjaW9uX3JlcXVlcmlkYScgJiYgIXByb3BzLmJhcnJhTmF2Rm9ybXVsYXJpbztcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e2NvbG9yfVxyXG4gICAgICAgICAgICBzdHlsZT17cHJvcHMuZGlzYWJsZWQgPyB7IHBvaW50ZXJFdmVudHM6ICdub25lJywgb3BhY2l0eTogMC45IH0gOiB7fX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAge3Byb3BzLmJhcnJhTmF2Rm9ybXVsYXJpb31cclxuICAgICAgICAgICAgICAgIHttb3N0cmFyQm90b25lcmFOYXZlZ2FjaW9uID8gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxCb3RvbmVyYU5hdmVnYWNpb24gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfS8+ICBcclxuICAgICAgICAgICAgICAgICkgOiBudWxsfSBcclxuICAgICAgICAgICAgICAgIHtwcm9wcy5tb2RvRE0gPT09ICdjYXBhJyAmJiAhcHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvID8gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PjxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICc1cHgnIH19PiBNT0RPIENBUEFDSVRBQ0nDk048L3NwYW4+PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICA8VXN1YXJpb0xvZ3VlYWRvWUNvbmZpZyBtb3N0cmFyU2V0dXA9eyFmb3JQa30gbW9zdHJhckxvZ291dD17ISFwYW50YWxsYUFjdHVhbCAmJiAhcHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvfSBvbkxvZ291dD17aGFuZGxlTG9nb3V0fSAvPlxyXG4gICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICA8L0FwcEJhcj5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCb3RvbmVyYU5hdmVnYWNpb24ocHJvcHM6IHsgZGlzYWJsZWQ/OiBib29sZWFuIH0pOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCB7IHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uR3JvdXAgdmFyaWFudD1cIm91dGxpbmVkXCIgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJpbmhlcml0XCI+XHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnaGRyJyB9KSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYW50YWxsYUFjdHVhbCA9PT0gJ2hkcicgfHwgcHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17cGFudGFsbGFBY3R1YWwgPT09ICdoZHInID8geyBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknIH0gOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxJQ09OLkFzc2lnbm1lbnQgLz4gSG9qYSBkZSBSdXRhXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ3NpbmNyb25pemFjaW9uJyB9KSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJyB8fCBwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXtwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJyA/IHsgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjEpJyB9IDogdW5kZWZpbmVkfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8SUNPTi5DbG91ZFN5bmMgLz4gU2luY3Jvbml6YWNpw7NuXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVXN1YXJpb0xvZ3VlYWRvWUNvbmZpZyhwcm9wczogeyBcclxuICAgIG1vc3RyYXJTZXR1cD86IGJvb2xlYW4sXHJcbiAgICBtb3N0cmFyTG9nb3V0PzogYm9vbGVhbixcclxuICAgIG9uTG9nb3V0PzogKCkgPT4gdm9pZCwgXHJcbiAgICBuYXZpZ2F0aW9uTWVudT86IFJlYWN0LlJlYWN0Tm9kZSBcclxufSk6IEpTWC5FbGVtZW50IHtcclxuICAgIHZhciB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IGdldEZvcm1SZW5kZXJlcigpLmdldFVzZXJuYW1lTG9ndWVhZG8oKTtcclxuICAgIHZhciBpZHBlcjogc3RyaW5nIHwgbnVsbCA9IGdldEZvcm1SZW5kZXJlcigpLmdldElkcGVyTG9ndWVhZG8oKTtcclxuICAgIHZhciB7IHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG5cclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW29wZW5EaWFsb2csIHNldE9wZW5EaWFsb2ddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAgIHZhciBoYW5kbGVMb2dvdXRDbGljayA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICBzZXRPcGVuRGlhbG9nKHRydWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaGFuZGxlQ2xvc2UgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgc2V0T3BlbkRpYWxvZyhmYWxzZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBoYW5kbGVDb25maXJtTG9nb3V0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIHNldE9wZW5EaWFsb2coZmFsc2UpO1xyXG4gICAgICAgIGlmIChwcm9wcy5vbkxvZ291dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9wcy5vbkxvZ291dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGRhdG9zID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciB0aWVuZUVuY3Vlc3RhczogYm9vbGVhbiA9ICEhKGRhdG9zICYmIGRhdG9zLmluZm9ybWFjaW9uSGRyICYmIE9iamVjdC5rZXlzKGRhdG9zLmluZm9ybWFjaW9uSGRyKS5sZW5ndGggPiAwKTtcclxuICAgIGNvbnN0IG1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICB7cHJvcHMubmF2aWdhdGlvbk1lbnV9XHJcbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJib2R5MlwiIHN0eWxlPXt7IGNvbG9yOiAnaW5oZXJpdCcsIGZvbnRXZWlnaHQ6ICdib2xkJywgbWFyZ2luTGVmdDonNXB4JyB9fT5cclxuICAgICAgICAgICAgICAgIHtpZHBlcn0gLSB7dXNlcm5hbWV9XHJcbiAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAge3Byb3BzLm1vc3RyYXJTZXR1cCA/IChcclxuICAgICAgICAgICAgICAgIDxGYXN0U2V0dXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnbW9kbycgfSkpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtSWNvbj57bW9kb0RNID09PSAnY2FwYScgPyA8SUNPTi5CdXNpbmVzc0NlbnRlciAvPiA6IDxJQ09OLlNwb3J0c0VzcG9ydHMgLz59IDwvTGlzdEl0ZW1JY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0PkNhbWJpbyBhIG1vZG8ge21vZG9ETSA9PT0gJ2NhcGEnID8gJ1Byb2R1Y2Npw7NuJyA6ICdDYXBhY2l0YWNpw7NuJ308L0xpc3RJdGVtVGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0PlNvcG9ydGUgdMOpY25pY288L0xpc3RJdGVtVGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5SRVNFVF9PUENJT05FUyh7fSkpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtSWNvbj48SUNPTi5SZWZyZXNoLz48L0xpc3RJdGVtSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5SZXNldCBvcGNpb25lczwvTGlzdEl0ZW1UZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBgJHtsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZX0vLi4vbWVudSNpPXNpbmNyb25pemFyYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0gIFxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtSWNvbj48SUNPTi5TeW5jQWx0IC8+PC9MaXN0SXRlbUljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHQ+U2luY3Jvbml6YWNpw7NuIChsaW5rIHZpZWpvKTwvTGlzdEl0ZW1UZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L0Zhc3RTZXR1cD5cclxuICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgIHtwcm9wcy5tb3N0cmFyTG9nb3V0ID8gKFxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImluaGVyaXRcIiBvbkNsaWNrPXtoYW5kbGVMb2dvdXRDbGlja30gc3R5bGU9e3sgbWluV2lkdGg6ICdhdXRvJywgcGFkZGluZzogJzZweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKSA6IG51bGx9XHJcblxyXG4gICAgICAgICAgICA8RGlhbG9nIG9wZW49e29wZW5EaWFsb2d9IG9uQ2xvc2U9e2hhbmRsZUNsb3NlfT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5DZXJyYXIgU2VzacOzbjwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aWVuZUVuY3Vlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkhheSBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gZWwgZGlzcG9zaXRpdm8uIFNpIHNhbGUgZGUgbGEgYXBsaWNhY2nDs24gc2luIHNpbmNyb25pemFyIHBvZHLDrWEgcGVyZGVyIGVsIHRyYWJham8gcmVhbGl6YWRvLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiwr9Fc3TDoSBzZWd1cm8gZGUgcXVlIGRlc2VhIHNhbGlyPyBQYXJhIHZvbHZlciBhIGluZ3Jlc2FyIGRlYmVyw6EgaW5pY2lhciBzZXNpw7NuIG51ZXZhbWVudGUuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICB7dGllbmVFbmN1ZXN0YXMgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1Mb2dvdXR9IGNvbG9yPVwic2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FsaXIgZGUgdG9kb3MgbW9kb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVhciByZWxldmFuZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gY29sb3I9XCJpbmhlcml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtTG9nb3V0fSBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FsaXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9Qcm9wcyB7XHJcbiAgICB0aXR1bG9BcHBCYXI6IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIHRpdHVsb1BhbmVsOiBzdHJpbmc7XHJcbiAgICBoZWFkZXJBZGljaW9uYWw/OiBSZWFjdC5SZWFjdE5vZGU7XHJcblxyXG4gICAgbW9kb0RNOiBNb2RvRE07XHJcbiAgICBvbmxpbmU6IGJvb2xlYW47XHJcblxyXG4gICAgbG9hZGluZz86IGJvb2xlYW47XHJcbiAgICBhdmlzbz86IHsgdGlwbzogJ2luZm8nIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJywgbWVuc2FqZTogc3RyaW5nIH0gfCBudWxsO1xyXG5cclxuICAgIHRleHRvQm90b25BY2Npb246IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIGNvbG9yQm90b25BY2Npb24/OiBDb2xvclZhbHVlcztcclxuICAgIG9uQWNjaW9uOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGRlc2hhYmlsaXRhckJvdG9uVm9sdmVyPzogYm9vbGVhbjtcclxuICAgIG1lbnNhamVWYWNpbz86IHN0cmluZztcclxuXHJcbiAgICBjaGlsZHJlbk1vZGFsZXM/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXRBY2Npb25EaXNwb3NpdGl2byhwcm9wczogTGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9Qcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IGRhdG9zQnlQYXNzID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgY29uc3QgYXZpc29SZWR1eCA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5hdmlzb1BlcnNpc3RlbnRlKTtcclxuICAgIGNvbnN0IGF2aXNvQU1vc3RyYXIgPSBwcm9wcy5hdmlzbyB8fCBhdmlzb1JlZHV4O1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoYXZpc29SZWR1eCkge1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2F2aXNvUGVyc2lzdGVudGUnLCB2YWxvcjogbnVsbCB9KSk7XHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9LCBbYXZpc29SZWR1eCwgZGlzcGF0Y2hdKTtcclxuXHJcbiAgICBjb25zdCBjYW50Q2FyZ2FzOiBudW1iZXIgPSBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgPyBsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5hcnJheSgpLmxlbmd0aCA6IDA7XHJcbiAgICBjb25zdCBjYW50UmVzcHVlc3RhczogbnVtYmVyID0gaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpICYmIGVzdHJ1Y3R1cmEgPyBsaWtlQXIoZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF0pLmFycmF5KCkubGVuZ3RoIDogMDtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17cHJvcHMubW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgdGl0dWxvPXtwcm9wcy50aXR1bG9BcHBCYXJ9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMubG9hZGluZ31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUvPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7IHBhZGRpbmc6ICcyMHB4JywgbWFyZ2luOiAnYXV0bycsIG1hcmdpbkJvdHRvbTogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNVwiPntwcm9wcy50aXR1bG9QYW5lbH08L1R5cG9ncmFwaHk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5oZWFkZXJBZGljaW9uYWx9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5JbmZvcm1hY2nDs24gZGVsIGRpc3Bvc2l0aXZvOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PntjYW50Q2FyZ2FzfSDDoXJlYXM6IHtsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5rZXlzKCkuam9pbignLCAnKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57Y2FudFJlc3B1ZXN0YXN9IHtlc3RydWN0dXJhPy51YVBwYWwgfHwgJ3ZpdmllbmRhcyd9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5tZW5zYWplVmFjaW8gJiYgcHJvcHMubWVuc2FqZVZhY2lvLnRyaW0oKSAhPT0gXCJcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzIwcHgnIH19Pntwcm9wcy5tZW5zYWplVmFjaW99PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHthdmlzb0FNb3N0cmFyICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206ICcyMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYXZpc29BTW9zdHJhci50aXBvID09PSAnc3VjY2VzcycgPyAnI2U2ZmZmYScgOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdlcnJvcicgPyAnI2ZmZjVmNScgOiAnI2VkZjJmNycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogYXZpc29BTW9zdHJhci50aXBvID09PSAnc3VjY2VzcycgPyAnIzIzNGU1MicgOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdlcnJvcicgPyAnIzliMmMyYycgOiAnIzJkMzc0OCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGAxcHggc29saWQgJHthdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdzdWNjZXNzJyA/ICcjMzE5Nzk1JyA6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ2Vycm9yJyA/ICcjZTUzZTNlJyA6ICcjY2JkNWUwJ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e2F2aXNvQU1vc3RyYXIubWVuc2FqZX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEwcHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3JCb3RvbkFjY2lvbiB8fCAncHJpbWFyeSd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMubG9hZGluZyB8fCAhcHJvcHMub25saW5lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17cHJvcHMub25BY2Npb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy50ZXh0b0JvdG9uQWNjaW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLm9ubGluZSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb2xvcj1cInNlY29uZGFyeVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IHByb3BzLmRlc2hhYmlsaXRhckJvdG9uVm9sdmVyID8gJzBweCcgOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGViZSBlc3RhciBjb25lY3RhZG8gYSBpbnRlcm5ldCBwYXJhIHJlYWxpemFyIGVzdGEgYWNjacOzbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVuTW9kYWxlc31cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBQYW50YWxsYVNpbmNyb25pemFjaW9uUHJvcHMge1xyXG4gICAgLy8gUHJvcHMgb3BjaW9uYWxlcyBwYXJhIGVsIFwic2Fib3JcIiByZXF1ZXJpZGFcclxuICAgIHJlcXVlcmlkYT86IGJvb2xlYW47XHJcbiAgICBtZW5zYWplUmVxdWVyaWRvPzogUmVhY3QuUmVhY3ROb2RlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFTaW5jcm9uaXphY2lvbihwcm9wczogUGFudGFsbGFTaW5jcm9uaXphY2lvblByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgYXZpc29QZXJzaXN0ZW50ZSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5hdmlzb1BlcnNpc3RlbnRlKTtcclxuICAgIGNvbnN0IG9ubGluZTogYm9vbGVhbiA9IHVzZU9ubGluZVN0YXR1cygpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgbW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlU2luY3Jvbml6YXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnYXZpc29QZXJzaXN0ZW50ZScsIHZhbG9yOiBudWxsIH0pKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdG9zID0gYXdhaXQgZm9ybVJlbmRlcmVyLm9uU2luY3Jvbml6YXIoYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJEYXRvcygpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5jYXJnYXJNb3RvcigpO1xyXG4gICAgICAgICAgICBjb25zdCBtZW5zYWplRXhpdG8gPSBgU2luY3Jvbml6YWNpw7NuIGV4aXRvc2EuIFNpbmNybyBOwrogJHtkYXRvcy5udW1fc2luY3JvfWA7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9QQU5UQUxMQV9BQ1RVQUwoeyBwYW50YWxsYTogJ3NpbmNyb25pemFjaW9uJywgYXZpc29QZXJzaXN0ZW50ZTogeyB0aXBvOiAnc3VjY2VzcycsIG1lbnNhamU6IG1lbnNhamVFeGl0byB9IH0pKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfUEFOVEFMTEFfQUNUVUFMKHtcclxuICAgICAgICAgICAgICAgIHBhbnRhbGxhOiBwcm9wcy5yZXF1ZXJpZGEgPyAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyA6ICdzaW5jcm9uaXphY2lvbicsXHJcbiAgICAgICAgICAgICAgICBhdmlzb1BlcnNpc3RlbnRlOiB7IHRpcG86ICdlcnJvcicsIG1lbnNhamU6IGBFcnJvciBkZSBzaW5jcm9uaXphY2nDs246ICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCB9XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEVzdGlsbyBwYXJhIGVsIG1lbnNhamUgY3VhbmRvIGVzIHJlcXVlcmlkYVxyXG4gICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzID0geyBmb250U2l6ZTogXCIxLjJyZW1cIiwgZm9udFdlaWdodDogNjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxNXB4XCIgfTtcclxuXHJcbiAgICAvLyBTaSBlcyByZXF1ZXJpZGEsIGlueWVjdGFtb3MgZWwgbWVuc2FqZSBleHBsaWNhdGl2byBhcnJpYmFcclxuICAgIGNvbnN0IGhlYWRlckFkaWNpb25hbCA9IHByb3BzLnJlcXVlcmlkYSAmJiBwcm9wcy5tZW5zYWplUmVxdWVyaWRvID8gKFxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cImRpdlwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICB7cHJvcHMubWVuc2FqZVJlcXVlcmlkb31cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICApIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICB0aXR1bG9BcHBCYXI9e3Byb3BzLnJlcXVlcmlkYSA/IGBTSU5DUk9OSVpBQ0nDk04gUkVRVUVSSURBJHttb2RvRE0gPT09ICdjYXBhJyA/ICcgLSBDQVBBJyA6ICcnfWAgOiAnU0lOQ1JPTklaQUNJw5NOJ31cclxuICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgIHRpdHVsb1BhbmVsPXtwcm9wcy5yZXF1ZXJpZGEgPyBcIlNpbmNyb25pemFjacOzbiBSZXF1ZXJpZGFcIiA6IFwiU2luY3Jvbml6YXIgRGlzcG9zaXRpdm9cIn1cclxuICAgICAgICAgICAgaGVhZGVyQWRpY2lvbmFsPXtoZWFkZXJBZGljaW9uYWx9XHJcbiAgICAgICAgICAgIGF2aXNvPXthdmlzb1BlcnNpc3RlbnRlfVxyXG4gICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICBvbmxpbmU9e29ubGluZX1cclxuICAgICAgICAgICAgdGV4dG9Cb3RvbkFjY2lvbj17XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nID8gXHJcbiAgICAgICAgICAgICAgICAgICAgJ1NpbmNyb25pemFuZG8uLi4nXHJcbiAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT48SUNPTi5DbG91ZFN5bmMgLz4gU2luY3Jvbml6YXI8L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29sb3JCb3RvbkFjY2lvbj17bW9kb0RNID09PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeSd9XHJcbiAgICAgICAgICAgIG9uQWNjaW9uPXtoYW5kbGVTaW5jcm9uaXphcn1cclxuICAgICAgICAgICAgbWVuc2FqZVZhY2lvPXtwcm9wcy5yZXF1ZXJpZGEgPyBcIiBcIiA6IFwiTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcyBsb2NhbG1lbnRlLlwifVxyXG4gICAgICAgIC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFDYW1iaW9Nb2RvKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGNvbnN0IFthdmlzbywgc2V0QXZpc29dID0gdXNlU3RhdGU8eyB0aXBvOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnZXJyb3InLCBtZW5zYWplOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xyXG4gICAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuICAgIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGNvbnN0IFttb2RvRE0sIHNldE1vZG9ETV0gPSB1c2VTdGF0ZTxNb2RvRE0+KCdwcm9kdWMnKTtcclxuICAgIGNvbnN0IFtlcnJvclBhc3N3b3JkLCBzZXRFcnJvclBhc3N3b3JkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgY29uc3Qgb25saW5lOiBib29sZWFuID0gdXNlT25saW5lU3RhdHVzKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmZXRjaE1vZG8gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgICAgICAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRNb2RvRE0obSk7XHJcbiAgICAgICAgICAgIHNldE1vZG9ETShtKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZldGNoTW9kbygpO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNvbmZpcm1hckNhbWJpbyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICBpZiAocGFzc3dvcmQgIT09ICcxMjM0Jykge1xyXG4gICAgICAgICAgICBzZXRFcnJvclBhc3N3b3JkKCdDb250cmFzZcOxYSBpbmNvcnJlY3RhLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEVycm9yUGFzc3dvcmQobnVsbCk7XHJcbiAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICBzZXRBdmlzbyhudWxsKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBudWV2b01vZG86IE1vZG9ETSA9IG1vZG9ETSA9PT0gJ3Byb2R1YycgPyAnY2FwYScgOiAncHJvZHVjJztcclxuICAgICAgICAgICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5vblNpbmNyb25pemFyKGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGZvcm1SZW5kZXJlci5zZXRNb2RvRE0obnVldm9Nb2RvKTtcclxuICAgICAgICAgICAgc2V0TW9kb0RNKG51ZXZvTW9kbyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5jYXJnYXJNb3RvcigpO1xyXG4gICAgICAgICAgICBzZXRBdmlzbyh7IHRpcG86ICdzdWNjZXNzJywgbWVuc2FqZTogYE1PRE8gJHtudWV2b01vZG8udG9VcHBlckNhc2UoKX0gQUNUSVZBRE8gWSBESVNQT1NJVElWTyBTSU5DUk9OSVpBRE9gIH0pO1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ21vZG8nIH0pKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgc2V0QXZpc28oeyB0aXBvOiAnZXJyb3InLCBtZW5zYWplOiBgRXJyb3IgYWwgY2FtYmlhciBkZSBtb2RvOiAke3VuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWAgfSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldFBhc3N3b3JkKCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlckFkaWNpb25hbFRleHQgPSAoXHJcbiAgICAgICAgPFR5cG9ncmFwaHkgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMjBweCcsIGZvbnRXZWlnaHQ6ICdib2xkJyB9fT5cclxuICAgICAgICAgICAgTW9kbyBhY3R1YWw6IDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBtb2RvRE0gPT09ICdjYXBhJyA/ICdncmVlbicgOiAnYmx1ZScsIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnIH19Pnttb2RvRE19PC9zcGFuPlxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8TGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgdGl0dWxvQXBwQmFyPVwiQ0FNQklPIERFIE1PRE9cIlxyXG4gICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgdGl0dWxvUGFuZWw9XCJDYW1iaWFyIE1vZG8gZGVsIERpc3Bvc2l0aXZvXCJcclxuICAgICAgICAgICAgaGVhZGVyQWRpY2lvbmFsPXtoZWFkZXJBZGljaW9uYWxUZXh0fVxyXG4gICAgICAgICAgICBhdmlzbz17YXZpc299XHJcbiAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICAgIG9ubGluZT17b25saW5lfVxyXG4gICAgICAgICAgICB0ZXh0b0JvdG9uQWNjaW9uPXtgQ2FtYmlhciBhIG1vZG8gJHttb2RvRE0gPT09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9YH1cclxuICAgICAgICAgICAgY29sb3JCb3RvbkFjY2lvbj17bW9kb0RNID09PSAncHJvZHVjJyA/ICdwcmltYXJ5JyA6ICdzdWNjZXNzJ31cclxuICAgICAgICAgICAgb25BY2Npb249eygpID0+IHsgc2V0RXJyb3JQYXNzd29yZChudWxsKTsgc2V0RGlhbG9nT3Blbih0cnVlKTsgfX1cclxuICAgICAgICAgICAgY2hpbGRyZW5Nb2RhbGVzPXtcclxuICAgICAgICAgICAgICAgIDxEaWFsb2cgb3Blbj17ZGlhbG9nT3Blbn0gb25DbG9zZT17KCkgPT4geyBzZXREaWFsb2dPcGVuKGZhbHNlKTsgc2V0UGFzc3dvcmQoJycpOyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+Q29uZmlybWFyIGNhbWJpbyBkZSBtb2RvPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzE1cHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybWEgY2FtYmlvIGRlIG1vZG8gXCJ7bW9kb0RNfVwiIGEgXCJ7bW9kb0RNID09PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnfVwiLiBTZSBzaW5jcm9uaXphcsOhIGVsIGRpc3Bvc2l0aXZvLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JQYXNzd29yZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBzdHlsZT17eyBjb2xvcjogJyNkMzJmMmYnLCBtYXJnaW5Cb3R0b206ICcxNXB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvclBhc3N3b3JkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiYm9keTJcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JyB9fT5Qb3IgZmF2b3IgaW5ncmVzZSBsYSBjb250cmFzZcOxYTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwYXNzd29yZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYXNzd29yZChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yUGFzc3dvcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JQYXNzd29yZChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgcGFkZGluZzogJzEwcHgnLCBmb250U2l6ZTogJzE2cHgnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHsgc2V0RGlhbG9nT3BlbihmYWxzZSk7IHNldFBhc3N3b3JkKCcnKTsgc2V0RXJyb3JQYXNzd29yZChudWxsKTsgfX0gY29sb3I9XCJpbmhlcml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtYXJDYW1iaW99IGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpcm1hclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlUHJvcHMge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlKF9wcm9wczogSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCB2ZXJzaW9uID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0QXBwQ2FjaGVWZXJzaW9uKCk7XHJcbiAgICBjb25zdCB7IG51bV9zaW5jcm8gfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxQYXBlciBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2Pkluc3RpdHV0byBkZSBFc3RhZMOtc3RpY2EgeSBDZW5zb3MgZGUgbGEgQ2l1ZGFkIEF1dMOzbm9tYSBkZSBCdWVub3MgQWlyZXMgLSBJREVDQkE8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+dmVyc2nDs24ge3ZlcnNpb259IC0ge251bV9zaW5jcm8gPyBgc2luY3JvOiAke251bV9zaW5jcm8udG9TdHJpbmcoKX1gIDogJ3NpbiBzaW5jcm9uaXphcid9PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvUGFwZXI+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzID0ge1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSG9qYURlUnV0YURlc3BsaWVndWVUeXBlID0gKHByb3BzOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzKSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgSG9qYURlUnV0YURlc3BsaWVndWU6IEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEhvamFEZVJ1dGFEZXNwbGllZ3VlID0gKGhvamFEZVJ1dGE6IEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZSkgPT4gSG9qYURlUnV0YURlc3BsaWVndWUgPSBob2phRGVSdXRhXHJcblxyXG5zZXRIb2phRGVSdXRhRGVzcGxpZWd1ZSgoX3Byb3BzOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzKSA9PiB7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICB2YXIgeyBjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgdGl0dWxvPVwiSE9KQSBERSBSVVRBXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUvPlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihjYXJnYXMpLm1hcCgoY2FyZ2EsIGlkQ2FyZ2EsIF8sIHBvc2ljaW9uKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDYXJnYSBrZXk9e2lkQ2FyZ2F9IGNhcmdhPXtjYXJnYX0gaWRDYXJnYT17aWRDYXJnYX0gcG9zaWNpb249e3Bvc2ljaW9ufSBpbmZvcm1hY2lvbkhkcj17aW5mb3JtYWNpb25IZHJ9IGZlZWRiYWNrUm93VmFsaWRhdG9yPXtmZWVkYmFja1Jvd1ZhbGlkYXRvcn0gcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30gLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMaXN0YVRleHRvcyhwcm9wczogeyB0ZXh0b3M6IHN0cmluZ1tdIH0pIHtcclxuICAgIHJldHVybiA8dWw+XHJcbiAgICAgICAge3Byb3BzLnRleHRvcy5tYXAodCA9PiA8bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOiB7IFt4OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnMgPSB7XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDogJ2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6ICcnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPcGVuZWRUYWJzKCkge1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHsgbW9kb0RpcmVjdG8gfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBtb2RvRGlyZWN0bzogc3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG8gfSkpO1xyXG4gICAgY29uc3QgdXBkYXRlVGFic1N0YXR1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgIH0sIFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvID8gbnVsbCA6ICh0YWJzKSA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlciB0YWItZXJyb3JcIj7CoUFURU5DScOTTiEgSGF5IG3DoXMgZGUgdW5hIHZlbnRhbmEgYWJpZXJ0YS4gU2UgcHVlZGVuIHBlcmRlciBkYXRvczoge3RhYnN9PC9kaXY+XHJcbiAgICAgICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpIHtcclxuICAgIHZhciB7IGZvclBrLCBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIHZhciBkYXRvc0J5UGFzcyA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5hciBzaSBsYSBzaW5jcm9uaXphY2nDs24gZXMgcmVxdWVyaWRhXHJcbiAgICBjb25zdCBzaW5jcm9SZXF1ZXJpZGEgPSAhaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpXHJcbiAgICAgICAgfHwgKGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKSAmJiBkYXRvc0J5UGFzcy5pZHBlciAhPT0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0SWRwZXJMb2d1ZWFkbygpKTtcclxuXHJcbiAgICAvLyBTaSBsYSBzaW5jcm8gZXMgcmVxdWVyaWRhLCBmb3J6YXIgcGFudGFsbGFBY3R1YWwgdsOtYSBSZWR1eFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoc2luY3JvUmVxdWVyaWRhICYmIHBhbnRhbGxhQWN0dWFsICE9PSAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJykge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ3NpbmNyb25pemFjaW9uX3JlcXVlcmlkYScgfSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtzaW5jcm9SZXF1ZXJpZGEsIHBhbnRhbGxhQWN0dWFsLCBkaXNwYXRjaF0pO1xyXG5cclxuICAgIGlmIChzaW5jcm9SZXF1ZXJpZGEpIHtcclxuICAgICAgICBjb25zdCBtZW5zYWplID0gIWhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKVxyXG4gICAgICAgICAgICA/IDw+IERlYmUgc2luY3Jvbml6YXIgZWwgZGlzcG9zaXRpdm8gcGFyYSBvYnRlbmVyIHVuYSBob2phIGRlIHJ1dGEuPC8+XHJcbiAgICAgICAgICAgIDogPD4gRWwgdXN1YXJpbyBhdXRlbnRpY2FkbyBubyBjb2luY2lkZSBjb24gZWwgdXN1YXJpbyBhc29jaWFkbyBhbFxyXG4gICAgICAgICAgICAgICAgdHJhYmFqbyBhbG1hY2VuYWRvIGVuIGxhIHRhYmxldC5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgRGViZSBzaW5jcm9uaXphciBhbnRlcyBkZSBjb250aW51YXIuXHJcbiAgICAgICAgICAgIDwvPjtcclxuICAgICAgICByZXR1cm4gPFBhbnRhbGxhU2luY3Jvbml6YWNpb24gcmVxdWVyaWRhPXt0cnVlfSBtZW5zYWplUmVxdWVyaWRvPXttZW5zYWplfSAvPjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9yUGsgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gPFBhbnRhbGxhU2luY3Jvbml6YWNpb24gLz5cclxuICAgICAgICB9IGVsc2UgaWYgKHBhbnRhbGxhQWN0dWFsID09PSAnbW9kbycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxQYW50YWxsYUNhbWJpb01vZG8gLz5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxIb2phRGVSdXRhRGVzcGxpZWd1ZSAvPlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30gLz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoXHJcbiAgICBmb3JtUmVuZGVyZXI6IEZvcm1SZW5kZXJlcixcclxuICAgIG9wdHM6IHsgZm9yUGtSYWl6PzogRm9yUGtSYWl6IH0gPSB7fVxyXG4pIHtcclxuICAgIGF3YWl0IGZvcm1SZW5kZXJlci5jYXJnYXJNb3RvcigpO1xyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBjcmVhclN0b3JlRm9ybXVsYXJpbyhvcHRzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRocm93IChlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6ID8gXCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiIDogXCJWb2x2ZXIgYSBsYSBob2phIGRlIHJ1dGFcIn0+XHJcbiAgICAgICAgICAgIDxPcGVuZWRUYWJzIC8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UgLz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTogTGlicmVEZXNwbGllZ3VlVHlwZSkgPT4gTGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gPGRpdiBrZXk9e3Byb3BzLmtleX0gaWQ9e3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99PmVzdGUgY2FzaWxsZXJvIGRlYmUgcmVkZWZpbmlyc2UgZW4gbGEgQVBQIGZpbmFsIHkgc3UgdXNvIGVzIGV4Y2x1c2l2byBkZWwgw6FyZWEgaW5mb3Jtw6F0aWNhPC9kaXY+KVxyXG5cclxuc2V0Q2FsY3VsYXJWYXJpYWJsZXMoKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlLCB1YVBhZHJlUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEpID0+IHtcclxuICAgICAgICB2YXIgbGVlck5vbWJyZXMgPSAocmVzcHVlc3Rhc1VBUGFkcmU6IFJlc3B1ZXN0YXMsIGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgIGlmIChsb3NOb21icmVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvc05vbWJyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOiBzdHJpbmcpID0+IG5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKG5vbWJyZTogc3RyaW5nLCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXVtjb25maWdQYWRyZS52YXJOb21icmVQZXJzb25hXSA9IG5vbWJyZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSkge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZVBlcnNvbmFzID09ICd2aXZpZW5kYXMnKSB7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeiwgY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXNwdWVzdGFzVUFQYWRyZSBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YVBhZHJlUGVyc29uYXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNVQVBhZHJlLCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciB1YXNJdGVyYXI6IFBhcnRpYWw8e1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106IENvbmZpZ1BhZHJlXHJcbiAgICB9PjtcclxuICAgIHZhciBjb25maWdFbmN1OiBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGU6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcIm5vbWJyZXNfY29tcG9uZW50ZXNfc3VwXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXTogY29uZmlnU3VwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIodWFzSXRlcmFyKS5mb3JFYWNoKChjb25maWdQYWRyZSwgdWFQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnUGFkcmUpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSwgdWFQYWRyZSBhcyBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZ1BhZHJlczogQ29uZmlnUGFkcmVbXSA9IFtjb25maWdFbmN1LCBjb25maWdTdXBlXTtcclxuICAgICAgICBjb25maWdQYWRyZXMuZm9yRWFjaCgoY29uZmlnUGFkcmUpID0+IHtcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCAndml2aWVuZGFzJywgZXN0cnVjdHVyYSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgLy9UT0RPOiBNRUpPUkFSIEVOIEFMR1VOIE1PTUVOVE8gRUwgQk9UT04gTElTVE9cclxuICAgIC8vbGV0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEggPyAnb2snIDogbnVsbDtcclxuICAgIC8vbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAvL3Jlc3B1ZXN0YXNSYWl6WyckQi5GOlMxX1NVUCcgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSHN1cCA/ICdvaycgOiBudWxsO1xyXG59KVxyXG5cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyQ29tb2RpbmVzKGZvclBrOiBGb3JQaykge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZUZvcm11bGFyaW8oKTtcclxuICAgIGlmICghc3RvcmUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhY3R1YWwgPSAoc3RvcmUuZ2V0U3RhdGUoKSBhcyBDYXNvU3RhdGUpPy5vcGNpb25lcz8uY29tb2RpbmVzIHx8IGNvbW9kaW5lc0luaWNpYWxlcztcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBpbmZvSGRyID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXTtcclxuICAgIGNvbnN0IHNlbWFuYU51bWVybyA9IGluZm9IZHI/LnRlbT8uc2VtYW5hO1xyXG4gICAgY29uc3Qgc2VtYW5hT2JqID0gc2VtYW5hTnVtZXJvICE9IG51bGwgPyBlc3RydWN0dXJhLnNlbWFuYXM/LltzZW1hbmFOdW1lcm8gYXMgSWRTZW1hbmFdIDogbnVsbDtcclxuXHJcbiAgICAvLyBSZXNwdWVzdGFzIGJhc2UgYSBwYXJ0aXIgZGVsIGZvclBrIHJlY2liaWRvXHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG5cclxuICAgIC8vIDEuIElkZW50aWZpY2Ftb3MgZWwgY29udGVuZWRvciBkZSBwZXJzb25hcyBzZWfDum4gJ2NvblJlYUhvZ2FyJ1xyXG4gICAgbGV0IGNvbnRlbmVkb3JQZXJzb25hczogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG4gICAgY29uc3QgdmFyTmFtZVJlYWxpemFkYSA9IGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIgPyAnZW50cmVhJyA6ICdlbnRyZWF2JztcclxuXHJcbiAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgIGNvbnN0IHBrSG9nYXIgPSAoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcz8uaG9nYXJlcz8ucGtfYWdyZWdhZGEgYXMga2V5b2YgRm9yUGspIHx8ICdob2dhcic7XHJcbiAgICAgICAgY29uc3QgbnVtSG9nYXJBY3R1YWwgPSBmb3JQa1twa0hvZ2FyXSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmIChudW1Ib2dhckFjdHVhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkeEhvZ2FyID0gbnVtSG9nYXJBY3R1YWwgLSAxO1xyXG4gICAgICAgICAgICBjb25zdCBob2dhcmVzQXJyYXkgPSByZXNwdWVzdGFzUmFpelsnaG9nYXJlcycgYXMgSWRVbmlkYWRBbmFsaXNpc10gYXMgYW55W107XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JQZXJzb25hcyA9IEFycmF5LmlzQXJyYXkoaG9nYXJlc0FycmF5KSA/IGhvZ2FyZXNBcnJheVtpZHhIb2dhcl0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udGVuZWRvclBlcnNvbmFzID0gcmVzcHVlc3Rhc1JhaXo7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29tb2RpbmVzQ2FsY3VsYWRvczogUmVjb3JkPElkQ29tb2Rpbiwgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi5jb21vZGluZXNJbmljaWFsZXMsXHJcbiAgICAgICAgLi4uYWN0dWFsLFxyXG4gICAgICAgIC4uLntcclxuICAgICAgICAgICAgcmVzcHMxOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICAgICAgcGFyZW50czE6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICByZXNwaTE6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICBwYXJlbnRpMTogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgIG5qZWZlOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gRXZhbHVhbW9zIGNvbW9kaW5lcyBkZSBsYSBlbnRyZXZpc3RhIHJlYWxpemFkYSAoJ2VudHJlYScgbyAnZW50cmVhdicpXHJcbiAgICBpZiAoY29udGVuZWRvclBlcnNvbmFzICYmIHZhck5hbWVSZWFsaXphZGEgaW4gY29udGVuZWRvclBlcnNvbmFzKSB7XHJcbiAgICAgICAgaWYgKGNvbnRlbmVkb3JQZXJzb25hc1t2YXJOYW1lUmVhbGl6YWRhXSA9PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vbWJyZXIgPSBjb250ZW5lZG9yUGVyc29uYXNbJ25vbWJyZXInXTtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uZCA9IGNvbnRlbmVkb3JQZXJzb25hc1sncmVzcG9uZCddO1xyXG4gICAgICAgICAgICBjb25zdCBjck51bU1pZW1icm8gPSBjb250ZW5lZG9yUGVyc29uYXNbJ2NyX251bV9taWVtYnJvJ107XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwZXJzb25hc0FycmF5ID0gQXJyYXkuaXNBcnJheShjb250ZW5lZG9yUGVyc29uYXNbJ3BlcnNvbmFzJ10pXHJcbiAgICAgICAgICAgICAgICA/IChjb250ZW5lZG9yUGVyc29uYXNbJ3BlcnNvbmFzJ10gYXMgYW55W10pXHJcbiAgICAgICAgICAgICAgICA6IFtdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVzY2FyUGVyc29uYSA9IChudW0/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBudW0gIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgID8gcGVyc29uYXNBcnJheS5maW5kKChwOiBhbnksIGlkeDogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwPy5wZXJzb25hICE9IG51bGwgPyBOdW1iZXIocC5wZXJzb25hKSA9PT0gTnVtYmVyKG51bSkgOiAoaWR4ICsgMSkgPT09IE51bWJlcihudW0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRvUGFyZW50ZXNjbyA9IChwOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHA0ID0gcD8ucDQgPz8gcD8ucDRyO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA0ICE9IG51bGwgPyBvYnRlbmVyVGV4dG9QYXJlbnRlc2NvKE51bWJlcihwNCksIGVzdHJ1Y3R1cmEub3BlcmF0aXZvKSA6IG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwZXJzb25hUmVzcCA9IGJ1c2NhclBlcnNvbmEocmVzcG9uZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcnNvbmFSZXNwaSA9IGJ1c2NhclBlcnNvbmEoY3JOdW1NaWVtYnJvKTtcclxuICAgICAgICAgICAgY29uc3QgamVmZSA9IGJ1c2NhclBlcnNvbmEoMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlc3AgPSB0ZXh0b1BhcmVudGVzY28ocGVyc29uYVJlc3ApO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRSZXNwaSA9IHRleHRvUGFyZW50ZXNjbyhwZXJzb25hUmVzcGkpO1xyXG5cclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21vZGluZXNDYWxjdWxhZG9zLCB7XHJcbiAgICAgICAgICAgICAgICByZXNwczE6IG5vbWJyZXIgPyBTdHJpbmcobm9tYnJlcikgOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICAgICAgICAgIHBhcmVudHMxOiBwYXJlbnRSZXNwID8gcGFyZW50UmVzcCA6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICAgICAgcmVzcGkxOiBwZXJzb25hUmVzcGk/Lm5vbWJyZSA/IFN0cmluZyhwZXJzb25hUmVzcGkubm9tYnJlKSA6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50aTE6IHBhcmVudFJlc3BpID8gcGFyZW50UmVzcGkgOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICAgICAgICAgIG5qZWZlOiBqZWZlPy5ub21icmUgPyBTdHJpbmcoamVmZS5ub21icmUpIDogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gXHJcbiAgICB9XHJcblxyXG4gICAgLy8gMy4gQ29tb2RpbmVzIGluZGVwZW5kaWVudGVzIC8gZ2xvYmFsZXNcclxuICAgIGNvbnN0IHJhbmdvRmVjaGEgPSAoZGVzZGU/OiBzdHJpbmcgfCBudWxsLCBoYXN0YT86IHN0cmluZyB8IG51bGwpID0+XHJcbiAgICAgICAgKGRlc2RlICYmIGhhc3RhKSA/IGAke2ZlY2hhUmVmZXJlbmNpYShkZXNkZSl9IGEgJHtmZWNoYVJlZmVyZW5jaWEoaGFzdGEpfWAgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHNlbVJlZiA9IHJhbmdvRmVjaGEoc2VtYW5hT2JqPy5zZW1hbmFfcmVmZXJlbmNpYV9kZXNkZSwgc2VtYW5hT2JqPy5zZW1hbmFfcmVmZXJlbmNpYV9oYXN0YSk7XHJcbiAgICBjb25zdCBkMzBSZWYgPSByYW5nb0ZlY2hhKHNlbWFuYU9iaj8uWyczMGRpYXNfcmVmZXJlbmNpYV9kZXNkZSddLCBzZW1hbmFPYmo/LlsnMzBkaWFzX3JlZmVyZW5jaWFfaGFzdGEnXSk7XHJcblxyXG4gICAgLy8gJ2NhbnRpX2hvZ2FyZXMnIHNvbG8gc2kgY29uUmVhSG9nYXIgPT09IHRydWUsIGRpcmVjdG8gZGUgJ3RvdGFsX2gnIGVuIGxhIHJhw616XHJcbiAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICBjb21vZGluZXNDYWxjdWxhZG9zLmNhbnRfaG9nYXJlcyA9IHRvdGFsSCAhPSBudWxsID8gU3RyaW5nKHRvdGFsSCkgOiBOT19DQVJHQURPX0FVTjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGZWNoYSBkZSByZWFsaXphY2nDs246IHNlIGNvbnN1bHRhIHNpZW1wcmUgZW4gbGEgcmHDrXogZGUgbGEgdml2aWVuZGFcclxuICAgIGNvbnN0IGZSZWFsaXogPSByZXNwdWVzdGFzUmFpelsnZl9yZWFsaXpfbycgYXMgSWRWYXJpYWJsZV07XHJcbiAgICBjb21vZGluZXNDYWxjdWxhZG9zLmZyZWFsaXogPSBmUmVhbGl6ICE9IG51bGwgPyBTdHJpbmcoZlJlYWxpeikgOiBOT19DQVJHQURPX0FVTjtcclxuXHJcbiAgICBpZiAoc2VtUmVmKSBjb21vZGluZXNDYWxjdWxhZG9zLlNFTV9SRUYgPSBzZW1SZWY7XHJcbiAgICBpZiAoZDMwUmVmKSBjb21vZGluZXNDYWxjdWxhZG9zLkQzMF9SRUYgPSBkMzBSZWY7XHJcbiAgICBpZiAoc2VtYW5hT2JqPy5tZXNfcmVmZXJlbmNpYSkgY29tb2RpbmVzQ2FsY3VsYWRvcy5NRVNfUkVGID0gbWVzUmVmZXJlbmNpYShzZW1hbmFPYmoubWVzX3JlZmVyZW5jaWEpO1xyXG4gICAgaWYgKHNlbWFuYU51bWVybyAhPSBudWxsKSBjb21vZGluZXNDYWxjdWxhZG9zLlNFTV9OVU0gPSBTdHJpbmcoc2VtYW5hTnVtZXJvKTtcclxuXHJcbiAgICBjb25zdCBjYW1iaW8gPSBPYmplY3Qua2V5cyhjb21vZGluZXNDYWxjdWxhZG9zKS5zb21lKFxyXG4gICAgICAgIChrZXkpID0+IGFjdHVhbFtrZXkgYXMgSWRDb21vZGluXSAhPT0gY29tb2RpbmVzQ2FsY3VsYWRvc1trZXkgYXMgSWRDb21vZGluXVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY2FtYmlvKSB7XHJcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9DT01PRElORVMoY29tb2RpbmVzQ2FsY3VsYWRvcykpO1xyXG4gICAgfVxyXG59XHJcblxyXG5zZXRDYWxjdWxhckNvbW9kaW5lcyhjYWxjdWxhckNvbW9kaW5lcyk7XHJcblxyXG5mdW5jdGlvbiBsb2FkQ1NTKGNzc1VSTDogc3RyaW5nLCBpZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICBsaW5rLmhyZWYgPSBjc3NVUkw7XHJcbiAgICAgICAgbGluay5pZCA9IGlkIHx8IGNzc1VSTDtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2FyZ2FuZG8gZWwgZXN0aWxvJywgZXJyKVxyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBwcm9ibGVtYSBjYXJnYW5kbyBlc3RpbG8gJHtjc3NVUkx9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNTU0J5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdmFyIGxpbmtOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgbGlua05vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcclxufVxyXG5cclxuY29uc3QgQk9PVFNUUkFQXzVfMV8zX1NSQyA9ICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnO1xyXG5cclxuLy9JTklDSU8gQ09OVFJPTCBQRVNUQcORQVMgQUJJRVJUQVNcclxuZnVuY3Rpb24gbG9hZEluc3RhbmNlKCkge1xyXG4gICAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdjb250YWRvcicpO1xyXG4gICAgdmFyIG15SWQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCgxMDAgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXSA9IDE7XHJcbiAgICBpbmZvT3BlbmVkVGFicy5teUlkID0gbXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdzb3knKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSkge1xyXG4gICAgICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3VubG9hZCcpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnbG9hZCcpIHtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDE7XHJcbiAgICAgICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnc295JywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzID0gbGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXywgaWQpID0+IGlkICE9IG15SWQpLmpvaW4oJywnKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9O1xyXG4gICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdsb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB2YXIgbm90aWZ5VW5sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAndW5sb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICB9O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIG5vdGlmeVVubG9hZCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBub3RpZnlVbmxvYWQpXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBsb2FkSW5zdGFuY2UoKVxyXG59KVxyXG5cclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVMgQUJJRVJUQVMiXX0=
|
|
2438
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMEtBLDhEQUVDO0lBdUpELGdGQXdCQztJQThKRCw4QkE2QkM7SUErdURELDRCQUtDO0lBa01ELG9EQVNDO0lBUUQsa0VBRUM7SUFFRCxvR0F3RUM7SUFFRCxvQ0FlQztJQWVELDBDQXFCQztJQUVELGdEQXFDQztJQUVELHdEQThHQztJQXVCRCwwREFvRkM7SUFRRCx3REF5REM7SUFHRCxzQ0FzREM7SUFFRCxnREFvR0M7SUFLRCxrRUFXQztJQWtDRCxrQ0FJQztJQVVELGdDQWNDO0lBRUQsOEJBdUNDO0lBRUQsOERBa0JDO0lBM3NHRCwrQkFBK0I7SUFDL0Isc0NBQXNDO0lBQ3RDLHFEQVcwQjtJQUMxQiw2REFROEI7SUEyU3JCLDhGQTVTTCxrQ0FBYSxPQTRTSztJQTFTdEIsbUNBb0JpQjtJQUNqQiwyREFxQjRCO0lBQzVCLHlEQUs0QjtJQUM1QixpQ0FBcUQ7SUFDckQsNkNBQXFFO0lBQ3JFLHFDQUEyQztJQUMzQywrQ0FBeUQ7SUFDekQsMkNBQXdDO0lBRXhDLDRDQVN1QjtJQUd2QiwyREFlNEI7SUFFNUIsMkNBQTJDO0lBQzNDLG1EQUFzRjtJQUV0RixpRUFBaUU7SUFDakUsd0VBQXdFO0lBQ3hFLElBQUEsb0NBQW9CLEVBQUMsU0FBZSwrQkFBK0I7O1lBQy9ELElBQUksWUFBWSxHQUFHLElBQUEsK0JBQWUsR0FBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdDLElBQUcsVUFBVSxJQUFJLEtBQUssRUFBQyxDQUFDO2dCQUNwQixJ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QUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUYsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFDRixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksWUFBWSxHQUFHO1lBQ2YsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ2pELHdCQUF3QjtJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtRQUM1QixZQUFZLEVBQUUsQ0FBQTtJQUNsQixDQUFDLENBQUMsQ0FBQTs7QUFFRiwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQge1xyXG4gICAgUmVuZGVyUHJpbmNpcGFsLFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLFxyXG4gICAgdXNlT25saW5lU3RhdHVzLFxyXG4gICAgUmVuZGVyaXphZG9ySlNPTixcclxuICAgIGZlY2hhUmVmZXJlbmNpYSxcclxuICAgIG1lc1JlZmVyZW5jaWEsXHJcbiAgICBvYnRlbmVyVGV4dG9QYXJlbnRlc2NvLFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBSRUdFWF9TUExJVF9DT01PRElORVMsXHJcbiAgICBJU19URU1fUEFUVEVSTixcclxuICAgIElTX1ZBUklBQkxFX0hBU0hfUEFUVEVSTixcclxuICAgIElTX0NPTU9ESU5fUkVEVVhfUEFUVEVSTixcclxuICAgIGV4dHJhZXJDb21vZGluZXNSZWR1eCxcclxuICAgIGV4dHJhZXJWYXJpYWJsZXNJbnRlcmVzLFxyXG4gICAgZ2V0QkZWYXJOYW1lcyxcclxufSBmcm9tIFwiLi9oZWxwZXJzLWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHtcclxuICAgIEJsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLFxyXG4gICAgRXN0YWRvQ2FyZ2EsIEZpbHRybywgRm9yUGssIEZvclBrUmFpeiwgRm9ybXVsYXJpbyxcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsXHJcbiAgICBSZXNwdWVzdGFzLCBSZXNwdWVzdGFMYXNVQSwgUmVzcHVlc3Rhc1JhaXosIFZhbG9yLCBURU0sIElkQ2FyZ2EsIENhcmdhLCBJZEZpbiwgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkQ2FzaWxsZXJvLFxyXG4gICAgUHJlZ3VudGFDb25TaU5vLFxyXG4gICAgVGV4dG8sIEVzdHJ1Y3R1cmEsIEluZm9ybWFjaW9uSGRyLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSxcclxuICAgIGl0ZXJhdG9yLCBlbXB0eSwgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyxcclxuICAgIFBNYXRyaXosXHJcbiAgICBNb2RvRE0sXHJcbiAgICBJZENvbW9kaW4sXHJcbiAgICBJZFNlbWFuYSxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgQXl1ZGFUZW1hUGFyYVVzdWFyaW8sXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuaW1wb3J0IHtcclxuICAgIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLFxyXG4gICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvLFxyXG4gICAgY2FsY3VsYXJBY3R1YWxCRixcclxuICAgIGNhbGN1bGFyRGlzYWJsZWRCRixcclxuICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGLFxyXG4gICAgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEsXHJcbiAgICBjcmVhckVuY3Vlc3RhLFxyXG4gICAgaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcyxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeixcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHJlc3B1ZXN0YXNGb3JQayxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzLFxyXG4gICAgc2V0RGF0b3NCeVBhc3MsXHJcbiAgICBzZXRFc3RydWN0dXJhLFxyXG4gICAgc2V0Q2FsY3VsYXJDb21vZGluZXMsXHJcbiAgICBzdXNjcmliaXJDYW1iaW9WYXJpYWJsZSxcclxuICAgIExpc3RlbmVyQ2FtYmlvVmFyaWFibGUsXHJcbiAgICBnZXRSZXN1bWVuRXN0YWRvRm9yVGFyZWFcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7XHJcbiAgICBjb21vZGluZXNJbmljaWFsZXMsXHJcbiAgICBjcmVhclN0b3JlRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsXHJcbiAgICBnZXRTdG9yZUZvcm11bGFyaW8sXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2gsIHNoYWxsb3dFcXVhbCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyIH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHsgc2xlZXAsIGNvYWxlc2NlLCBkYXRldGltZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2hlY2tib3gsXHJcbiAgICBEaWFsb2csIERpYWxvZ0FjdGlvbnMsIERpYWxvZ0NvbnRlbnQsIERpYWxvZ0NvbnRlbnRUZXh0LFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYixcclxuICAgIEljb24sXHJcbiAgICBMaXN0SXRlbUljb24sXHJcbiAgICBMaXN0SXRlbVRleHQsXHJcbiAgICBNZW51LCBNZW51SXRlbSwgUGFwZXIsIFBvcG92ZXIsXHJcbiAgICBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3csIFRvb2xiYXJcclxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcyxcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsXHJcbiAgICBnZXRFc3RydWN0dXJhLFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGFzLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7IGh0bWwsIEh0bWxUYWcgfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5pbXBvcnQgeyBGb3JtUmVuZGVyZXIsIGdldEZvcm1SZW5kZXJlciwgcmVnaXN0cmFyQ2FyZ2FyTW90b3IgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcblxyXG4vLyBSZWdpc3RyYSBsYSBpbXBsZW1lbnRhY2nDs24gZGUgY2FyZ2FyTW90b3IgYWwgY2FyZ2FyIGVsIG3Ds2R1bG8uXHJcbi8vIEVzdG8gZXZpdGEgbGEgZGVwZW5kZW5jaWEgY2lyY3VsYXIgcmVuZGVyLWNvbmZpZyDihpAgYnlwYXNzLWZvcm11bGFyaW8uXHJcbnJlZ2lzdHJhckNhcmdhck1vdG9yKGFzeW5jIGZ1bmN0aW9uIGNhcmdhckVzdHJ1Y3R1cmFZRGF0b3NFbk1lbW9yaWEoKSB7XHJcbiAgICB2YXIgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBkYXRvcyA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKTtcclxuICAgIGlmKGVzdHJ1Y3R1cmEgJiYgZGF0b3Mpe1xyXG4gICAgICAgIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgc2V0RGF0b3NCeVBhc3MoZGF0b3MpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5leHBvcnQgdHlwZSBSZXN1bHRhZG9QYXRoPFQgPSB1bmtub3duPiA9IHtcclxuICAgIGVuY29udHJhZG86IGJvb2xlYW47XHJcbiAgICB2YWxvcjogVCB8IG51bGw7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBvYnRlbmVyUG9yUGF0aDxUID0gdW5rbm93bj4ob2JqZXRvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwYXRoOiBzdHJpbmcpOiBSZXN1bHRhZG9QYXRoPFQ+IHtcclxuICAgIGNvbnN0IG5vRW5jb250cmFkbzogUmVzdWx0YWRvUGF0aDxUPiA9IHsgZW5jb250cmFkbzogZmFsc2UsIHZhbG9yOiBudWxsIH07XHJcblxyXG4gICAgaWYgKCFvYmpldG8gfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnIHx8IHBhdGgudHJpbSgpID09PSAnJykge1xyXG4gICAgICAgIHJldHVybiBub0VuY29udHJhZG87XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xhdmVzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgbGV0IGFjdHVhbDogYW55ID0gb2JqZXRvO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2xhdmUgPSBjbGF2ZXNbaV07XHJcblxyXG4gICAgICAgIC8vIFNpIGVsIG5pdmVsIGFjdHVhbCBubyBlcyB1biBvYmpldG8vYXJyYXkgbyBsYSBjbGF2ZSBOTyBleGlzdGUgZW4gw6lsXHJcbiAgICAgICAgaWYgKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JyB8fCAhKGNsYXZlIGluIGFjdHVhbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vRW5jb250cmFkbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFjdHVhbCA9IGFjdHVhbFtjbGF2ZV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbmNvbnRyYWRvOiB0cnVlLFxyXG4gICAgICAgIHZhbG9yOiAoYWN0dWFsID8/IG51bGwpIGFzIFQgfCBudWxsLFxyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgTk9fQ0FSR0FET19BVU4gPSAnLi4uLi4uLi4nO1xyXG5jb25zdCBTSU5fVkFMT1JfRU5fT0JKRVRPX1RFTSA9ICcnO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwsIGRpY2Npb25hcmlvPzogeyBbY2xhdmU6IHN0cmluZ106IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XHJcbiAgICBpZiAodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZywgXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywgJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCAodG9kbykgPT4gYFske3RvZG99XWApLnJlcGxhY2UoL0AoPzojP1tcXHctXSt8XFwkW3RUXVtlRV1bbU1dW15AXSopQC9nLCAodG9kbykgPT4gYFske3RvZG99XWApO1xyXG4gICAgaWYgKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0ZWFyUmVzdWx0YWRvQ29tb2Rpbih2YWxvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgWyR7dmFsb3J9XWA7XHJcbn1cclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAxLiBIRUxQRVJTIFBVUk9TIFkgRVhQUkVTSU9ORVMgUkVHVUxBUkVTXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy8gKGRlZmluaWRvcyBlbiBoZWxwZXJzLWZvcm11bGFyaW8udHMgcGFyYSBwb2RlciB0ZXN0ZWFybG9zIHNpbiBSZWFjdClcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAyLiBIT09LIFBFUlNPTkFMSVpBRE8gUEFSQSBCSU5ESU5HIERJTsOBTUlDT1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbmZ1bmN0aW9uIHVzZVZhcmlhYmxlc0VzY3VjaGFkYXModGV4dDogc3RyaW5nLCBmb3JQazogRm9yUGspIHtcclxuICAgIGNvbnN0IHZhcmlhYmxlc0ludGVyZXMgPSB1c2VNZW1vKCgpID0+IGV4dHJhZXJWYXJpYWJsZXNJbnRlcmVzKHRleHQpLCBbdGV4dF0pO1xyXG5cclxuICAgIC8vIEVzdGFkbyBsb2NhbCBjb24gbG9zIHZhbG9yZXMgcmVhbGVzIHBhcmEgcXVlIFJlYWN0IHNvbG8gcmUtcmVuZGVyaWNlIHNpIGVsIHN0cmluZyBDQU1CSUFcclxuICAgIGNvbnN0IFttYXBhVmFyaWFibGVzLCBzZXRNYXBhVmFyaWFibGVzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCgpID0+XHJcbiAgICAgICAgb2J0ZW5lclZhbG9yZXNBY3R1YWxlcyh2YXJpYWJsZXNJbnRlcmVzLCBmb3JQaylcclxuICAgICk7XHJcblxyXG4gICAgLy8gU2luY3Jvbml6YW1vcyBjdWFuZG8gY2FtYmlhbiB2YXJpYWJsZXNJbnRlcmVzIG8gZm9yUGtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2V0TWFwYVZhcmlhYmxlcyhvYnRlbmVyVmFsb3Jlc0FjdHVhbGVzKHZhcmlhYmxlc0ludGVyZXMsIGZvclBrKSk7XHJcbiAgICB9LCBbdmFyaWFibGVzSW50ZXJlcywgZm9yUGtdKTtcclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh2YXJpYWJsZXNJbnRlcmVzLmxlbmd0aCA9PT0gMCB8fCAhZm9yUGspIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXI6IExpc3RlbmVyQ2FtYmlvVmFyaWFibGUgPSAodmFyTW9kaWZpY2FkYSwgX251ZXZvVmFsb3IsIF9mb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW1wYWN0YVZhcmlhYmxlID0gdmFyaWFibGVzSW50ZXJlcy5pbmNsdWRlcyh2YXJNb2RpZmljYWRhKTtcclxuICAgICAgICAgICAgY29uc3QgaW1wYWN0YVJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzQXVtZW50YWRhcyAmJiB2YXJpYWJsZXNJbnRlcmVzLnNvbWUodiA9PiB2IGluIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaW1wYWN0YVZhcmlhYmxlICYmICFpbXBhY3RhUmVzcHVlc3RhcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gTGVlbW9zIGVsIG51ZXZvIGVzdGFkbyBkZSBsYSBmdWVudGUgZGUgdmVyZGFkXHJcbiAgICAgICAgICAgIGNvbnN0IG51ZXZvc1ZhbG9yZXMgPSBvYnRlbmVyVmFsb3Jlc0FjdHVhbGVzKHZhcmlhYmxlc0ludGVyZXMsIGZvclBrKTtcclxuXHJcbiAgICAgICAgICAgIHNldE1hcGFWYXJpYWJsZXMocHJldiA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJhbW9zIHZhbG9yIHBvciB2YWxvciBzaSByZWFsbWVudGUgY2FtYmnDsyBhbGdvIHZpc2libGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh1Ym9DYW1iaW8gPSB2YXJpYWJsZXNJbnRlcmVzLnNvbWUodiA9PiBwcmV2W3ZdICE9PSBudWV2b3NWYWxvcmVzW3ZdKTtcclxuICAgICAgICAgICAgICAgIC8vIFNpIE5PIGh1Ym8gY2FtYmlvIHJlYWwsIGRldm9sdmVtb3MgJ3ByZXYnIChtaXNtYSByZWZlcmVuY2lhKSB5IFJlYWN0IENBTkNFTEEgZWwgcmUtcmVuZGVyXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaHVib0NhbWJpbyA/IG51ZXZvc1ZhbG9yZXMgOiBwcmV2O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkZXN1c2NyaWJpciA9IHN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyLCB2YXJpYWJsZXNJbnRlcmVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gZGVzdXNjcmliaXIoKTtcclxuICAgIH0sIFt2YXJpYWJsZXNJbnRlcmVzLCBmb3JQa10pO1xyXG5cclxuICAgIC8vIEdldHRlciBleHB1ZXN0byBwYXJhIG1hbnRlbmVyIHR1IHNpbnRheGlzXHJcbiAgICByZXR1cm4gKG5vbWJyZVZhcjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICByZXR1cm4gbWFwYVZhcmlhYmxlc1tub21icmVWYXJdID8/IE5PX0NBUkdBRE9fQVVOO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gb2J0ZW5lclZhbG9yZXNBY3R1YWxlcyh2YXJpYWJsZXM6IHN0cmluZ1tdLCBmb3JQazogRm9yUGspOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIGNvbnN0IG1hcGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbWFwYTtcclxuICAgIGNvbnN0IHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IHYgb2YgdmFyaWFibGVzKSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcmVzcHVlc3Rhc0F1bWVudGFkYXM/Llt2IGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgIG1hcGFbdl0gPSBTdHJpbmcodmFsID8/IE5PX0NBUkdBRE9fQVVOKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtYXBhO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQnJlYWtlYWJsZVRleHQgPSBSZWFjdC5tZW1vKGZ1bmN0aW9uIEJyZWFrZWFibGVUZXh0KHByb3BzOiB7XHJcbiAgICB0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xyXG4gICAgZm9yUGs/OiBGb3JQaztcclxufSkge1xyXG4gICAgY29uc3QgeyB0ZXh0LCBjbGFzc05hbWUsIHN0eWxlIH0gPSBwcm9wcztcclxuXHJcbiAgICAvLyAxLiBFYXJseSBSZXR1cm5cclxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIDIuIEV4dHJhY2Npw7NuIGRlIGRlcGVuZGVuY2lhcyBSZWR1eCAoZGVzcHXDqXMgZGUgbGEgZ3VhcmRhKVxyXG4gICAgY29uc3QgcmVkdXhGb3JQayA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZT8ub3BjaW9uZXM/LmZvclBrKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGsgfHwgcmVkdXhGb3JQaztcclxuXHJcbiAgICAvLyAtLS0gQS4gU3VzY3JpcGNpw7NuIFJlZHV4IChDb21vZGluZXMpIC0tLVxyXG4gICAgY29uc3QgY29tb2RpbmVzSW50ZXJlcyA9IHVzZU1lbW8oKCkgPT4gZXh0cmFlckNvbW9kaW5lc1JlZHV4KHRleHQpLCBbdGV4dF0pO1xyXG5cclxuICAgIGNvbnN0IGNvbW9kaW5lc1ZhbG9yZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4ge1xyXG4gICAgICAgIGlmIChjb21vZGluZXNJbnRlcmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3Qgc3RvcmVDb21vZGluZXMgPSBzdGF0ZT8ub3BjaW9uZXM/LmNvbW9kaW5lcyB8fCBjb21vZGluZXNJbmljaWFsZXM7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0YWRvOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBjb21vZGluZXNJbnRlcmVzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdGFkb1tpZF0gPSBzdG9yZUNvbW9kaW5lc1tpZF0gPz8gY29tb2RpbmVzSW5pY2lhbGVzW2lkXSA/PyAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgIH0sIHNoYWxsb3dFcXVhbCk7XHJcblxyXG4gICAgLy8gLS0tIEIuIFN1c2NyaXBjacOzbiBhIHZhcmlhYmxlcyBjb24gIyAoTGUgcGFzYW1vcyBmb3JQayBzZWd1cm8sIG9wY2lvbmFsKSAtLS1cclxuICAgIGNvbnN0IG9idGVuZXJWYWxvclZhcmlhYmxlID0gdXNlVmFyaWFibGVzRXNjdWNoYWRhcyh0ZXh0LCBmb3JQayEpO1xyXG5cclxuICAgIC8vIC0tLSBDLiBQcmVwcm9jZXNhbWllbnRvIHNpbnTDoWN0aWNvIC0tLVxyXG4gICAgY29uc3QgcHJvY2VzYWRvID0gdGV4dFxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJy9cXHUyMDYzJylcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csICcvJDEnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9fX18qL2csIHRvZG8gPT4gYFske3RvZG99XWApO1xyXG5cclxuICAgIC8vIC0tLSBELiBUb2tlbml6YWRvIHkgUmVzb2x1Y2nDs24gLS0tXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSBwcm9jZXNhZG8uc3BsaXQoUkVHRVhfU1BMSVRfQ09NT0RJTkVTKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW5pZG8gPSBwYXJ0ZXMubWFwKChwYXJ0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAvLyBDQVNPIDE6IENvbW9kw61uIHRpcG8gVEVNIChAJHRlbS5wYXRoLmFsLmNhbXBvQClcclxuICAgICAgICBjb25zdCBtYXRjaFRlbSA9IHBhcnRlLm1hdGNoKElTX1RFTV9QQVRURVJOKTtcclxuICAgICAgICBpZiAobWF0Y2hUZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgaW5mb0hkciA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkRW5jID0gZm9yUGshW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF07XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBtYXRjaFRlbVsxXTtcclxuICAgICAgICAgICAgY29uc3Qge2VuY29udHJhZG8sIHZhbG9yfSA9IG9idGVuZXJQb3JQYXRoKGluZm9IZHJbaWRFbmNdLCBwYXRoKVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVuY29udHJhZG8gPyBmb3JtYXRlYXJSZXN1bHRhZG9Db21vZGluKFN0cmluZyh2YWxvciA/PyBTSU5fVkFMT1JfRU5fT0JKRVRPX1RFTSkpOiBcclxuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aW5kZXh9IHN0eWxlPXt7IGNvbG9yOiAncmVkJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7YE5vIHNlIGVuY29udHLDsyAke3BhcnRlfWB9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+IFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ0FTTyAyOiBWYXJpYWJsZSBkaW7DoW1pY2EgY29uIEhhc2ggKEAjdmFyaWFibGVAKVxyXG4gICAgICAgIGNvbnN0IG1hdGNoVmFySGFzaCA9IHBhcnRlLm1hdGNoKElTX1ZBUklBQkxFX0hBU0hfUEFUVEVSTik7XHJcbiAgICAgICAgaWYgKG1hdGNoVmFySGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0ZWFyUmVzdWx0YWRvQ29tb2RpbihvYnRlbmVyVmFsb3JWYXJpYWJsZShtYXRjaFZhckhhc2hbMV0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENBU08gMzogQ29tb2TDrW4gZ2xvYmFsIGRlIFJlZHV4IChAY29tb2RpbkApXHJcbiAgICAgICAgY29uc3QgbWF0Y2hDb21vZGluID0gcGFydGUubWF0Y2goSVNfQ09NT0RJTl9SRURVWF9QQVRURVJOKTtcclxuICAgICAgICBpZiAobWF0Y2hDb21vZGluKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vbWJyZUNvbW9kaW4gPSBtYXRjaENvbW9kaW5bMV07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbG9yID0gY29tb2RpbmVzVmFsb3Jlc1xyXG4gICAgICAgICAgICAgICAgPyBjb21vZGluZXNWYWxvcmVzW25vbWJyZUNvbW9kaW5dXHJcbiAgICAgICAgICAgICAgICA6IGNvbW9kaW5lc0luaWNpYWxlc1tub21icmVDb21vZGluIGFzIElkQ29tb2Rpbl07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0ZWFyUmVzdWx0YWRvQ29tb2Rpbih2YWxvcikgPz9cclxuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aW5kZXh9IHN0eWxlPXt7IGNvbG9yOiAncmVkJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7YE5vIHNlIGVuY29udHLDsyAke3BhcnRlfWB9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDQVNPIDQ6IFRleHRvIHBsYW5vXHJcbiAgICAgICAgcmV0dXJuIHBhcnRlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17c3R5bGV9Pntjb250ZW5pZG99PC9zcGFuPjtcclxufSk7XHJcblxyXG5leHBvcnQgeyBnZXRCRlZhck5hbWVzIH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyUmVzcHVlc3Rhc0JvdG9uRm9ybXVsYXJpbyhvcHRzOiB7XHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIHNhbHRvOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgZXhwcmVzaW9uSGFiaWxpdGFyPzogc3RyaW5nLFxyXG4gICAgbGlzdG9WYWxvcj86IFZhbG9yLFxyXG4gICAgYWdyZWdhclZhbG9yPzogVmFsb3IsXHJcbiAgICBoYWJpbGl0YXJWYWxvcj86IFZhbG9yXHJcbn0pIHtcclxuICAgIHZhciByZXNwdWVzdGFzQUJ5cGFzZWFyOiB7IHZhcmlhYmxlOiBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IFZhbG9yIH1bXSA9IFtdO1xyXG4gICAgaWYgKG9wdHMuc2FsdG8pIHtcclxuICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKG9wdHMuc2FsdG8pO1xyXG4gICAgICAgIGlmIChvcHRzLmxpc3RvVmFsb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQUJ5cGFzZWFyLnB1c2goeyB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogb3B0cy5saXN0b1ZhbG9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5hZ3JlZ2FyVmFsb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQUJ5cGFzZWFyLnB1c2goeyB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBvcHRzLmFncmVnYXJWYWxvciB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5leHByZXNpb25IYWJpbGl0YXIgJiYgb3B0cy5oYWJpbGl0YXJWYWxvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmVzcHVlc3Rhc0FCeXBhc2Vhci5wdXNoKHsgdmFyaWFibGU6IG9wdHMuZXhwcmVzaW9uSGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogb3B0cy5oYWJpbGl0YXJWYWxvciB9KTtcclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzQUJ5cGFzZWFyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YXMsIHsgZm9yUGs6IG9wdHMuZm9yUGtQYWRyZSwgcmVzcHVlc3RhczogcmVzcHVlc3Rhc0FCeXBhc2VhciB9KTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgVkVSX0RPTUlOSU8gPSBmYWxzZTsgLy8gZWwgZW5jdWVzdGFkb3Igbm8gbmVjZXNpdGEgdmVyIGVsIGRvbWluaW8gZW4gY2FkYSBlbmN1ZXN0YSBwb3JxdWUgZWwgZG9taW5pbyBkZXBlbmRlIGRlbCDDoXJlYSB5IHNlIGRlZHVjZSBkZWwgcHJpbWVyIGTDrWdpdG8gZGVsIG7Dum1lcm8gZGUgZW5jdWVzdGFcclxuLy8gbm8gcG9uZXIgVkVSX0RPTUlOSU8gZW4gdHJ1ZSwgY2FtYmlhciBwb3IgdW5hIHZhcmlhYmxlIHF1ZSBzZSBmaWplIHNpIGVsIERNIGVzdMOhIGVuIG1vZG8gcHJ1ZWJhIG8gZW4gbW9kbyBcImRpc2XDsW8gY29uY2VwdHVhbFwiXHJcblxyXG5jb25zdCBJRF9CT1RPTl9WT0xWRVJfSERSID0gJ2JvdG9uLXZvbHZlci1oZHInO1xyXG5jb25zdCBJRF9CT1RPTl9DRVJSQVIgPSAnYm90b24tY2VycmFyLWVuY3Vlc3RhJztcclxuXHJcbnZhciBkZWJlU2FsdGFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcclxuICAgIC8qXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldjpLZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBldi5rZXkgPT0gJ0VudGVyJyB8fCBldi5rZXlDb2RlID09IDEzO1xyXG4gICAgfSlcclxuICAgICovXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7IGNsYXNzTmFtZT86IHN0cmluZywgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLCBpZD86IHN0cmluZywgdGFiSW5kZXg/OiBudW1iZXIgfSAvLyBDU1NQcm9wZXJ0aWVzXHJcbnR5cGUgQ29sb3JWYWx1ZXMgPSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdkZWZhdWx0JyB8ICdpbmhlcml0JyB8ICdzdWNjZXNzJ1xyXG5cclxuZXhwb3J0IHR5cGUgTGlicmVEZXNwbGllZ3VlVHlwZSA9IChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBCdXR0b24gPSAoeyB2YXJpYW50LCBvbkNsaWNrLCBkaXNhYmxlZCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgY29sb3IsIHNpemUsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uLCBkaXNhYmxlRm9jdXNSaXBwbGUsIGRpc2FibGVSaXBwbGUsIHR5cGUsXHJcbiAgICAuLi5vdGhlclxyXG59OiB7XHJcbiAgICB2YXJpYW50Pzogc3RyaW5nLFxyXG4gICAgY29sb3I/OiBDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogJ3NtYWxsJyxcclxuICAgIHR5cGU/OiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyxcclxuICAgIGRpc2FibGVFbGV2YXRpb24/OiBhbnksIGRpc2FibGVGb2N1c1JpcHBsZT86IGFueSwgZGlzYWJsZVJpcHBsZT86IGFueSxcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IDxidXR0b25cclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YGJ0biBidG4ke3ZhcmlhbnQgPT0gJ2NvbnRhaW5lZCcgPyAnJyA6ICctJyArICh2YXJpYW50ID09ICdvdXRsaW5lZCcgPyAnb3V0bGluZScgOiB2YXJpYW50KX0tJHsoY29sb3IgPT0gJ2RlZmF1bHQnIHx8IGNvbG9yID09ICdpbmhlcml0JyA/ICdzZWNvbmRhcnknIDogY29sb3IgPT0gJ3NlY29uZGFyeScgPyAnZGFuZ2VyJyA6IGNvbG9yKSB8fCAnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWUgfHwgJyd9ICR7c2l6ZSA9PSAnc21hbGwnID8gJ2J0bi1zbScgOiAnJ31gfVxyXG4gICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgdHlwZT17dHlwZX1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3Qgc3R5bGVUb0NzcyA9IChzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJyB8fCBzdHlsZSA9PSBudWxsKSByZXR1cm4gc3R5bGU7XHJcbiAgICBjb25zdCByZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gc3R5bGUpIHtcclxuICAgICAgICBjb25zdCB2ID0gKHN0eWxlIGFzIGFueSlba107XHJcbiAgICAgICAgaWYgKHYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXMucHVzaChgJHtrLnJlcGxhY2UoL1tBLVpdL2csIChtOiBzdHJpbmcpID0+IFwiLVwiICsgbS50b0xvd2VyQ2FzZSgpKX06JHt2fWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXMuam9pbignOycpO1xyXG59XHJcblxyXG5jb25zdCBCdXR0b24yID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBzdHlsZSwgLi4ub3RoZXIgfToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiAnc21hbGwnLFxyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgc3RyaW5nLFxyXG4gICAgJGF0dHJzPzoge31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IGh0bWwuYnV0dG9uKHtcclxuICAgIC4uLm90aGVyLFxyXG4gICAgc3R5bGU6IHN0eWxlVG9Dc3Moc3R5bGUpLFxyXG4gICAgY2xhc3M6IGBidG4gYnRuJHt2YXJpYW50ID09ICdjb250YWluZWQnID8gJycgOiAnLScgKyAodmFyaWFudCA9PSAnb3V0bGluZWQnID8gJ291dGxpbmUnIDogdmFyaWFudCl9LSR7KGNvbG9yID09ICdkZWZhdWx0JyB8fCBjb2xvciA9PSAnaW5oZXJpdCcgPyAnc2Vjb25kYXJ5JyA6IGNvbG9yID09ICdzZWNvbmRhcnknID8gJ2RhbmdlcicgOiBjb2xvcikgfHwgJ3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lIHx8ICcnfSAke3NpemUgPT0gJ3NtYWxsJyA/ICdidG4tc20nIDogJyd9YCxcclxuICAgIGRpc2FibGVkLFxyXG4gICAgJG9uOiB7IGNsaWNrOiBvbkNsaWNrIH1cclxufSwgY2hpbGRyZW4pO1xyXG5cclxuXHJcbmNvbnN0IFRleHRGaWVsZCA9IChwcm9wczoge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbixcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86IGJvb2xlYW4sXHJcbiAgICBmdWxsV2lkdGg6IGJvb2xlYW5cclxuICAgIGlucHV0UHJvcHM/OiBhbnksXHJcbiAgICB2YWx1ZT86IGFueSxcclxuICAgIHR5cGU6IGFueSxcclxuICAgIGxhYmVsPzogc3RyaW5nLFxyXG4gICAgZXJyb3I/OiBib29sZWFuLFxyXG4gICAgaGVscGVyVGV4dD86IHN0cmluZyxcclxuICAgIG11bHRpbGluZT86IGJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86IChldmVudDogYW55KSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldmVudDogYW55KSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2ZW50OiBhbnksIHZhbG9yOiBhbnkpID0+IHZvaWQsXHJcbiAgICAvLyBvbktleURvd24/OihldmVudDpLZXlib2FyZEV2ZW50KT0+dm9pZCAvLyBLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PlxyXG4gICAgb25LZXlEb3duPzogUmVhY3QuS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxufSkgPT4gPGlucHV0XHJcbiAgICAgICAgey4uLnByb3BzLmlucHV0UHJvcHN9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cclxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cclxuICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWV9XHJcbiAgICAgICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgICAgICBvbkNoYW5nZT17cHJvcHMub25DaGFuZ2V9XHJcbiAgICAgICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cclxuICAgICAgICBvbkJsdXI9eyhldnQpID0+IHByb3BzLm9uQmx1cj8uKGV2dCwgZXZ0LnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLmxhYmVsfVxyXG4gICAgLz47XHJcblxyXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHsgY2hpbGRyZW4sIC4uLm90aGVycyB9OiB7XHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY29tcG9uZW50Pzogc3RyaW5nXHJcbiAgICB2YXJpYW50PzogJ2JvZHkyJ3wnaDUnfCdoNidcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXNcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQob3RoZXJzLnZhcmlhbnQgfHwgb3RoZXJzLmNvbXBvbmVudCB8fCAnZGl2Jywgb3RoZXJzLCBjaGlsZHJlbik7XHJcblxyXG5mdW5jdGlvbiBHcmlkKHByb3BzOiB7XHJcbiAgICBjb250YWluZXI/OiBib29sZWFuLFxyXG4gICAgc3BhY2luZz86IG51bWJlcixcclxuICAgIGl0ZW0/OiBib29sZWFuLFxyXG4gICAgd3JhcD86ICd3cmFwJyB8ICdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzogJ3JvdycgfCAnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86ICdzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgeHM/OiBudW1iZXIsXHJcbiAgICBzbT86IG51bWJlcixcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpIHtcclxuICAgIHZhciB7IGNvbnRhaW5lciwgaXRlbSwgd3JhcCwgZGlyZWN0aW9uLCBhbGlnbkl0ZW1zLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB4cywgc20sIHNwYWNpbmcsIC4uLm90aGVyIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgey4uLm90aGVyfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lIHx8ICcnfSAke3hzICE9IG51bGwgPyAnZ3JpZC14cy0nICsgeHMgOiAnJ30gJHtzbSAhPSBudWxsID8gJ2dyaWQtc20tJyArIHNtIDogJyd9YH1cclxuICAgICAgICBzdHlsZT17Y29udGFpbmVyID8ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgIGZsZXhXcmFwOiB3cmFwLFxyXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGFsaWduSXRlbXM6IGFsaWduSXRlbXMsXHJcbiAgICAgICAgICAgIG1hcmdpbjogc3BhY2luZyAhPSBudWxsID8gc3BhY2luZyAqIDggKyAncHgnIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICB9fVxyXG4gICAgPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEZhc3RTZXR1cFByb3BzIHtcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGYXN0U2V0dXAocHJvcHM6IEZhc3RTZXR1cFByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSBSZWFjdC51c2VTdGF0ZTxudWxsIHwgSFRNTEVsZW1lbnQ+KG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xyXG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIHNldE9wZW4oKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfT5cclxuICAgICAgICAgICAgICAgIDxJQ09OLlNldHRpbmdzIC8+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPE1lbnVcclxuICAgICAgICAgICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XHJcbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvTWVudT5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbi8qXHJcbi8vIGNvbnN0IHRha2VFbGVtZW50T3JEZWZhdWx0PEssIFQgZXh0ZW5kcyBbSyBpbl0sIEQ+KClcclxuZnVuY3Rpb24gaXNJbjxWLCBUPihrOmtleW9mIFQsIG9iamVjdDpUKTogb2JqZWN0W2tdIGlzIFZ7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcbiovXHJcbmZ1bmN0aW9uIHRha2VFbGVtZW50T3JEZWZhdWx0PFYsIEsgZXh0ZW5kcyBzdHJpbmcsIEtPIGV4dGVuZHMgc3RyaW5nPihrOiBLLCBvYmplY3Q6IHsgW2sgaW4gS09dOiBWIH0sIGRlZmF1bHRWYWx1ZTogVik6IFYge1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID9cclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBvciBhbGd1bmEgcmF6w7NuIFRTIG5vIHF1aWVyZSBlbnRlbmRlciBxdWUgc2kgayBlc3TDoSBlbiBvYmplY3QsIG9iamVjdFtrXSBleGlzdGVcclxuICAgICAgICBvYmplY3Rba11cclxuICAgICAgICA6IGRlZmF1bHRWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGllZ3VlRW5jYWJlemFkbyhwcm9wczogeyBjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlLCBsZWVyPzogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBmb3JQa051bGwgPSB7fSBhcyBGb3JQaztcclxuICAgIHJldHVybiA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm99IGxlZXI9e3Byb3BzLmxlZXJ9IGZvclBrPXtmb3JQa051bGx9IC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdWJpckhhc3RhKGVsZW1lbnRvOiBIVE1MRWxlbWVudCB8IG51bGwsIGZ1bjogKGVsZW1lbnRvOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBpZiAoZWxlbWVudG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHsgaWQsIHZhcmlhYmxlLCBmb3JQaywgdmFsb3JPcGNpb24gfTogeyBpZDogc3RyaW5nLCB2YXJpYWJsZTogSWRWYXJpYWJsZSwgZm9yUGs6IEZvclBrLCB2YWxvck9wY2lvbj86IGFueSB9KSB7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogdmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWJvcnJhclwiPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17dmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17dmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tYm9ycmFyXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyIC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gU2FsdG9EZXNwbGllZ3VlKHsgY2FzaWxsZXJvLCBwcmVmaWpvIH06IHsgY2FzaWxsZXJvOiBQcmVndW50YSB8IE9wY2lvbiB8IEZpbHRybywgcHJlZmlqbz86IHN0cmluZyB9KSB7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhc2VcIj5cclxuICAgICAgICAgICAge3ByZWZpam8gPyA8c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8SUNPTi5UcmVuZGluZ0ZsYXQgLz48c3Bhbj57Y2FzaWxsZXJvLnNhbHRvfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA6IG51bGxcclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IE9wY2lvbiwgdmFsb3JPcGNpb246IG51bWJlciwgdmFyaWFibGU6IElkVmFyaWFibGUsIGZvclBrOiBGb3JQaywgbGVlcjogYm9vbGVhbiwgY29uQm90b25Cb3JyYXI6IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgeyBjYXNpbGxlcm8gfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIHNhbHRvQXV0b21hdGljbyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5zYWx0b0F1dG9tYXRpY28pO1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4gPSBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gc3ViaXJIYXN0YShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGVsZW1lbnRvID0+IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgJ05PJyk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcikge1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsICdOTycpO1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogcHJvcHMudmFsb3JPcGNpb24sIHZhcmlhYmxlOiBwcm9wcy52YXJpYWJsZSwgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgIGlmICghcmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCB0aWVuZSA9PSAnU0knID8gJ05PJyA6ICdTSScpO1xyXG4gICAgICAgICAgICBpZiAodGllbmUgIT0gJ1NJJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlICYmIHNhbHRvQXV0b21hdGljbykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdibHVlJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKSA/IG51bGwgOiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNhc2lsbGVyby5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb25cIj5cclxuICAgICAgICB7cHJvcHMuY29uQm90b25Cb3JyYXIgPyA8Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgLz4gOiBudWxsfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlciA/ICdTSScgOiBjYXNpbGxlcm8ubGVlciA9PT0gZmFsc2UgPyAnTk8nIDogcHJvcHMubGVlciA/ICdTSScgOiAnTk8nfT48QnJlYWtlYWJsZVRleHQgdGV4dD17Y2FzaWxsZXJvLm5vbWJyZX0gLz48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz48QnJlYWtlYWJsZVRleHQgdGV4dD17Y2FzaWxsZXJvLmFjbGFyYWNpb259IC8+PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSAvPlxyXG4gICAgPC9HcmlkPlxyXG59XHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXMge1xyXG4gICAgdmFyX25hbWU6IElkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgbnVsbCxcclxuICAgIGNhc2lsbGVyb3M6IE9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm9Db25PcGNpb25lczogSWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazogRm9yUGssIGRlc3BsaWVndWVDb250ZW5pZG86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkge1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWVcclxuICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJvcHMuY2FzaWxsZXJvQ29uT3BjaW9uZXN9XHJcbiAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6IFByZWd1bnRhIHwgT3BjaW9uTXVsdGlwbGUgfCBDb25qdW50b1ByZWd1bnRhcykge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzogSFRNTERpdkVsZW1lbnRcclxuICAgICkgPT4ge1xyXG4gICAgICAgIHZhciB2YWxvckFjdHVhbCA9IHByZWd1bnRhLnZhcl9uYW1lID09IG51bGwgPyBudWxsIDogcmVzcHVlc3Rhc1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrUm93ID0gZmVlZGJhY2tGb3JtLmZlZWRiYWNrO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1ZhciA9IHByZWd1bnRhLnZhcl9uYW1lID09IG51bGwgPyBudWxsIDogZmVlZGJhY2tSb3dbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciB0aWVuZVZhbG9yID0gdmFsb3JBY3R1YWwgIT0gbnVsbCAmJiBmZWVkYmFja1ZhciAhPSBudWxsID8gKGZlZWRiYWNrVmFyLmNvblByb2JsZW1hID8gJ2ludmFsaWRvJyA6ICd2YWxpZG8nKSA6ICdOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzogRXN0YWRvVmFyaWFibGU7XHJcbiAgICAgICAgaWYgKHByZWd1bnRhLnRpcG92YXIpIHtcclxuICAgICAgICAgICAgZXN0YWRvID0gZmVlZGJhY2tWYXI/LmVzdGFkbyE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjID0+IGMudmFyX25hbWUgIT0gbnVsbCkucmVkdWNlKChwdiwgb20pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBmYiA9IGZlZWRiYWNrUm93Py5bb20udmFyX25hbWUhXSFcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGllbmVBY3R1YWw6IHB2LnRpZW5lQWN0dWFsIHx8IGZiLmVzdGFkbyA9PSAnYWN0dWFsJyxcclxuICAgICAgICAgICAgICAgICAgICBlc3RhU2FsdGVhZGE6IHB2LmVzdGFTYWx0ZWFkYSAmJiAoZmIuZXN0YWRvID09ICdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvID09ICdmdWVyYV9kZV9mbHVqb19wb3Jfc2FsdG8nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB7IHRpZW5lQWN0dWFsOiBmYWxzZSwgZXN0YVNhbHRlYWRhOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICBlc3RhZG8gPSBmZWVkYmFja011bHRpLnRpZW5lQWN0dWFsID8gJ2FjdHVhbCcgOiBmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYSA/ICdzYWx0ZWFkYScgOiAndG9kYXZpYV9ubydcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG8pO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ3RpZW5lLXZhbG9yJywgdGllbmVWYWxvcik7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAnZXN0YS1pbmhhYmlsaXRhZGEnLCBmZWVkYmFja1Zhcj8uaW5oYWJpbGl0YWRhID8gJ1NJJyA6ICdOTycpO1xyXG4gICAgICAgIGlmIChwcmVndW50YS52YXJfbmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgb3BjaW9uZXM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKGAuYm90b24tb3BjaW9uW21pLXZhcmlhYmxlPVwiJHtwcmVndW50YS52YXJfbmFtZX1cIl1gKSwgMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvciAoZWxlbWVudG9PcGNpb24gb2Ygb3BjaW9uZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvc0lucHV0OiBIVE1MSW5wdXRFbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKCcudmFyaWFibGUnKSk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b0lucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IgKGVsZW1lbnRvSW5wdXQgb2YgZWxlbWVudG9zSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZWxlbWVudG9JbnB1dCwgJ3ZhbHVlJywgdmFsb3JBY3R1YWwgPT0gbnVsbCA/ICcnIDogdmFsb3JBY3R1YWwudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJvdG9uTnNOYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibnNuYy1wcmVndW50YS1cIiArIHByZWd1bnRhLnZhcl9uYW1lKSE7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhib3Rvbk5zTmMsICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JBY3R1YWwgPT0gKHByZWd1bnRhLnZhbG9yX25zX25jID8/IC05KSA/IFwiU0lcIiA6IFwiTk9cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZShwcm9wczogeyBvcGNpb25NOiBPcGNpb25NdWx0aXBsZSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIGNvbnN0IHsgb3BjaW9uTSB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgc3R5bGVzOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0gb3BjaW9uTS5lc3BlY2lhbD8uZmxleERpcmVjdGlvbiA/IHsgZmxleERpcmVjdGlvbjogb3BjaW9uTS5lc3BlY2lhbC5mbGV4RGlyZWN0aW9uIH0gOiB7IGZsZXhXcmFwOiAnd3JhcCcgfTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUob3BjaW9uTSlcclxuICAgIH0pXHJcbiAgICBjb25zdCB1cGRhdGVXaW5kb3dXaWR0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRXaW5kb3dXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlV2luZG93V2lkdGgpO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NfVxyXG4gICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdsYXRlcmFsJ1xyXG4gICAgICAgIHN0eWxlPXtzdHlsZXN9XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICAgICAgdmVySWRHdWlvbj17dHJ1ZX1cclxuICAgICAgICAgICAgbGVlcj17b3BjaW9uTS5sZWVyICE9PSBmYWxzZX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogd2luZG93V2lkdGggLSA0MDAgfX0gLy9UT0RPIE1FSk9SQVJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxTaU5vRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17b3BjaW9uTX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5vcGNpb25NLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ2hvcml6b250YWwnfVxyXG4gICAgICAgIC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBDYXNpbGxlcm9FbmNhYmV6YWJsZSA9IEZvcm11bGFyaW8gfCBCbG9xdWUgfCBGaWx0cm8gfCBDb25qdW50b1ByZWd1bnRhcyB8IFByZWd1bnRhIHwgT3BjaW9uTXVsdGlwbGUgfCBQcmVndW50YVNpbXBsZSB8IENvbnNpc3RlbmNpYSB8IFRleHRvIHwgUE1hdHJpelxyXG5cclxuY29uc3QgZ2V0TG9zTWV0YWRhdG9zID0gKGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUpOiBSZWFjdC5KU1guRWxlbWVudCA9PlxyXG4gICAgPGRpdiBsb3MtbWV0YWRhdG9zPVwic2lcIj5cclxuICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInZhcmlhYmxlXCI+e2Nhc2lsbGVyby52YXJfbmFtZX08L3NwYW4+XHJcbiAgICAgICAge2Nhc2lsbGVyby50aXBvdmFyICYmIGNhc2lsbGVyby50aXBvdmFyICE9ICdvcGNpb25lcycgJiYgY2FzaWxsZXJvLnRpcG92YXIgIT0gJ3NpX25vJyA/XHJcbiAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidGlwb3ZhclwiPntjYXNpbGxlcm8udGlwb3Zhcn08L3NwYW4+XHJcbiAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lICYmIGNhc2lsbGVyby5vcHRhdGl2byA/IDxzcGFuIGVsLW1ldGFkYXRvPVwib3B0YXRpdmFcIj5vcHRhdGl2YTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uY2FsY3VsYWRhID8gPHNwYW4gZWwtbWV0YWRhdG89XCJjYWxjdWxhZGFcIj5jYWxjdWxhZGE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyA8c3BhbiBlbC1tZXRhZGF0bz1cIm9jdWx0YVwiPm9jdWx0YTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2hhYmlsaXRhclwiPmhhYmlsaXRhOiB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJ9PC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZyA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2F1dG9pbmdcIj5hdXRvaW5nOiB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgPC9kaXY+XHJcblxyXG5mdW5jdGlvbiBFbmNhYmV6YWRvRGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgY2FzaWxsZXJvOiBDYXNpbGxlcm9FbmNhYmV6YWJsZSxcclxuICAgIHZlcklkR3Vpb24/OiBib29sZWFuLFxyXG4gICAgbGVlcj86IGJvb2xlYW4sXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgY29uQ2FtcG9PcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5jb25DYW1wb09wY2lvbmVzKVxyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IGNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazogZm9yUGsgfSlcclxuICAgIH07XHJcbiAgICB2YXIgdmVyX2lkID0gY2FzaWxsZXJvLnZlcl9pZCA/PyBjYXNpbGxlcm8uY2FzaWxsZXJvO1xyXG4gICAgdmFyIGNhbGN1bGFkYSA9IGNhc2lsbGVyby5jYWxjdWxhZGE7XHJcbiAgICB2YXIgaWQgPSBgaWQtZGl2LSR7Y2FzaWxsZXJvLnZhcl9uYW1lIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99YDtcclxuICAgIHZhciBpZEFjY2lvbmVzID0gXCJhY2Npb25lcy1cIiArIGlkO1xyXG4gICAgcmV0dXJuIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9XCJlbmNhYmV6YWRvXCJcclxuICAgICAgICBkZWJlLWxlZXI9e3Byb3BzLmxlZXIgPyAnU0knIDogJ05PJ31cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IGNsYXNzTmFtZT1cImlkLWRpdlwiIHRpdGxlPXtgJHtjYXNpbGxlcm8uY2FzaWxsZXJvfSAtICR7Y2FzaWxsZXJvLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEFjY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgIGRpdiEuc2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIiwgKDEgLSBOdW1iZXIoZGl2IS5nZXRBdHRyaWJ1dGUoXCJhY2Npb24tdmlzaWJsZVwiKSkpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETy4gVmVyIHF1w6kgaGFjZW1vcyBjdWFuZG8gc2UgdG9jYSBlbCBJRCBkZSBsYSBwcmVndXRuYVxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2lkX3ByZWd1bnRhLCB7IHByZWd1bnRhOiBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkUHJlZ3VudGEsIGZvclBrIH0pO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAge3Zlcl9pZH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHsoY2FzaWxsZXJvLnRpcG92YXIgPT0gXCJzaV9ub1wiIHx8IGNhc2lsbGVyby50aXBvdmFyID09IFwib3BjaW9uZXNcIikgPyA8Q2FtcG8gZGlzYWJsZWQ9e2ZhbHNlfSBwcmVndW50YT17Y2FzaWxsZXJvIGFzIHVua25vd24gYXMgUHJlZ3VudGFTaW1wbGV9IGZvclBrPXtmb3JQa30gbWluaT17dHJ1ZX0gaGlkZGVuPXshY29uQ2FtcG9PcGNpb25lcyAmJiAncXVpdGFyJ30gLz4gOiBudWxsfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjY2lvbmVzLXByZWd1bnRhXCIgaWQ9e2lkQWNjaW9uZXN9IGFjY2lvbi12aXNpYmxlPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSA/IDxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcImJvcnJhci1wcmVndW50YS1cIiArIGNhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtYm9ycmFyXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyIC8+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSA/IChuc19uYyA9PiA8ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJuc25jLXByZWd1bnRhLVwiICsgY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1uc25jXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnNfbmMsIHZhcmlhYmxlOiBjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgTlMvTkNcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PikoY2FzaWxsZXJvLnZhbG9yX25zX25jID8/IC05KSA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPjxCcmVha2VhYmxlVGV4dCB0ZXh0PXtjYXNpbGxlcm8ubm9tYnJlfSAvPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby5lc3BlY2lhbD8uZ3BzID9cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMTBweCcgfX0gb25DbGljaz17KF9ldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZ3JlZ2FySW5mb0dQUyA9IChpbmZvOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJlc3B1ZXN0YXM6IHJBY3R1YWxlcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxvckFjdHVhbCA9IHJBY3R1YWxlc1t2YXJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXV4ID0gSlNPTi5wYXJzZSh2YWxvckFjdHVhbD8udG9TdHJpbmcoKSB8fCBcIltdXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eC51bnNoaWZ0KGluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiB2YXJOYW1lLCByZXNwdWVzdGE6IEpTT04uc3RyaW5naWZ5KGF1eCkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gYWdyZWdhckluZm9HUFMoYCR7ZGF0ZXRpbWUubm93KCkudG9ZbWRIbXMoKX0gLSBlc3BlcmFuZG8gcHVudG8gZ3BzYCkgfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9ID0gcG9zaXRpb24uY29vcmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUb1NhdmUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogeyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcG9zaXRpb24udGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhKU09OLnN0cmluZ2lmeShkYXRhVG9TYXZlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeyBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsIHRpbWVvdXQ6IDEwMDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0+PElDT04uTG9jYXRpb24gLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pIX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnJlYWtlYWJsZVRleHQgdGV4dD17Y2FzaWxsZXJvLmFjbGFyYWNpb259IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgIHtnZXRMb3NNZXRhZGF0b3MoY2FzaWxsZXJvKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6IHsgZm9yUGs6IEZvclBrLCB2YXJpYWJsZUJvcnJhcjogSWRWYXJpYWJsZSB9KSB7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogbnVsbCB9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPFBvcG92ZXJcclxuICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgICAgfX1cclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1hLWJvdG9uZXNcIj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wcy52YXJpYWJsZUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6IG51bGwgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgIH19PmJvcnJhciByZXNwdWVzdGE8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+dm9sdmVyIHNpbiBib3JyYXI8L0J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvUG9wb3Zlcj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gbG9uZ2l0dWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHsgdG9wLCBlbmZvY2FkbywgZWxlbWVudG9JbnB1dFZhcmlhYmxlIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgaWYgKHRvcCAhPSBudWxsICYmIHRvcCA+IDAgJiYgKCFlbmZvY2FkbyB8fCBcInNhbHRhIHNpZW1wcmVcIikpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT8uZm9jdXMoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2FtcG8ocHJvcHM6IHsgZGlzYWJsZWQ6IGJvb2xlYW4sIHByZWd1bnRhOiBQcmVndW50YVNpbXBsZSB8IFByZWd1bnRhQ29uT3BjaW9uZXMgfCBQcmVndW50YUNvblNpTm8gfCBPcGNpb25NdWx0aXBsZSwgZm9yUGs6IEZvclBrLCBtaW5pPzogYm9vbGVhbiwgaGlkZGVuPzogYm9vbGVhbiB8ICdxdWl0YXInIH0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhLCBkaXNhYmxlZCwgbWluaSB9ID0gcHJvcHM7XHJcbiAgICB2YXIgeyBzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBsb25naXR1ZCA9IG1pbmkgPyBwcmVndW50YS5jYXNpbGxlcm9zLnJlZHVjZSgoYWN1bSwgbykgPT4gTWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6XHJcbiAgICAgICAgcHJlZ3VudGEubG9uZ2l0dWQ7XHJcbiAgICAvLyB2YXIgW3ZhbG9yLCBzZXRWYWxvcl0gPSB1c2VTdGF0ZShwcm9wcy52YWxvcik7XHJcbiAgICB2YXIgW2VkaXRhbmRvLCBzZXRFZGl0YW5kb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICAvLyB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gICAgIHNldFZhbG9yKHByb3BzLnZhbG9yKVxyXG4gICAgLy8gfSwgW3Byb3BzLnZhbG9yXSk7XHJcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG1heExlbmd0aDogbG9uZ2l0dWQsXHJcbiAgICAgICAgZW50ZXJLZXlIaW50OiBcIm5leHRcIiBhcyBjb25zdCxcclxuICAgIH07XHJcbiAgICBjb25zdCBvbkNoYW5nZSA9IChudWV2b1ZhbG9yOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKSA9PiB7XHJcbiAgICAgICAgdmFyIHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHByZWd1bnRhLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVldm9WYWxvciB9KTtcclxuICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgJiYgZGViZVNhbHRhcikge1xyXG4gICAgICAgICAgICAocHJlZ3VudGEuZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpID8gbnVsbCA6IGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUocHJlZ3VudGEuZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHsgZXNCb3RvbkNvbmZpcm1hciB9OiB7IGVzQm90b25Db25maXJtYXI6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBlc0JvdG9uQ29uZmlybWFyID8gdHJ1ZSA6IChzYWx0b0F1dG9tYXRpY28gfHwgY29uQ2FtcG9PcGNpb25lcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGlzSW5wdXRGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyk7XHJcbiAgICAgICAgaWYgKGlzSW5wdXRGb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBvbkNoYW5nZShlbGVtZW50b0lucHV0VmFyaWFibGUgPyBlbGVtZW50b0lucHV0VmFyaWFibGUudmFsdWUgOiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChwcmVndW50YS5sb25naXR1ZCB8fCBsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuID09ICdxdWl0YXInID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IHByb3BzLmhpZGRlbiA/IHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSA6IHVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmkgPyBudWxsIDogPEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8Zm9ybSBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jYW1wby13cmFwcGVyXCIgXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdjb250ZW50cycgfX0gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8VGV4dEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZhcmlhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAvL3Zhci1sZW5ndGg9e3ByZWd1bnRhLmxvbmdpdHVkfSBcclxuICAgICAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17aW5wdXRQcm9wc31cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtwcmVndW50YS5kZXNwbGllZ3VlVGlwb0lucHV0ID8/IGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvKHByZWd1bnRhLnRpcG92YXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhfZXZlbnQpID0+IHNldEVkaXRhbmRvKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQmx1cj17KF9ldmVudCwgdmFsb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXNFbnRlciA9IChldmVudC5rZXkgPT0gJ0VudGVyJyB8fCBldmVudC5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXNFbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/LmdwcyB8fCBtaW5pID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWNvbmZpcm1hci1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD17ZWRpdGFuZG8gPyBcImNvbnRhaW5lZFwiIDogJ291dGxpbmVkJ30gc2l6ZT1cInNtYWxsXCIgY29sb3I9e2VkaXRhbmRvID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi1jb25maXJtYXI9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+PElDT04uQ2hlY2sgLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXMge1xyXG4gICAgdmFyX25hbWU6IElkVmFyaWFibGUsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25lc0Rlc3BsaWVndWUoXHJcbiAgICB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQaywgbGVlciwgZGVzcGxpZWd1ZUNvbnRlbmlkbyB9OlxyXG4gICAgICAgIHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBsZWVyOiBib29sZWFuLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH1cclxuKSB7XHJcbiAgICBjb25zdCBkZXNwbGVnYXJPdHJvcyA9IChvcGNpb246IE9wY2lvbiwgc29sb1BhcmFEZXNwbGllZ3VlOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgbnVsbCkgPT4gb3BjaW9uLmNhc2lsbGVyb3MubWFwKChzdWJQcmVndW50YTogUHJlZ3VudGEpID0+IChcclxuICAgICAgICBzb2xvUGFyYURlc3BsaWVndWUgPT0gbnVsbCB8fCBzb2xvUGFyYURlc3BsaWVndWUgPT0gc3ViUHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3Ryb3MtZXNwZWNpZmljYXJcIiBzdHlsZT17eyB3aWR0aDogJzEwMCUnIH19IGtleT17c3ViUHJlZ3VudGEuaWRfY2FzaWxsZXJvfT5cclxuICAgICAgICAgICAgICAgIDxQcmVndW50YURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17c3ViUHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdzdXBlcmlvcidcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PiA6IG51bGxcclxuICAgICkpXHJcbiAgICByZXR1cm4gPD48ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BjaW9uZXNcIiBkZXNwbGllZ3VlLWNvbnRlbmlkbz17ZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfT5cclxuICAgICAgICAgICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246IE9wY2lvbiwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgPEdyaWQga2V5PXtvcGNpb24uaWRfY2FzaWxsZXJvfSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17b3BjaW9uLmRlc3BsaWVndWVPY3VsdGEgPyAob3BjaW9uLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxPcGNpb25EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT17Y2FzaWxsZXJvQ29uT3BjaW9uZXMudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtvcGNpb24uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9e2xlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkJvdG9uQm9ycmFyPXtpID09IDAgfHwgZGVzcGxpZWd1ZUNvbnRlbmlkbyAhPSAnaG9yaXpvbnRhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbyA9PSAnaG9yaXpvbnRhbCcgPyBudWxsIDogZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLCBudWxsKX1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvID09ICdob3Jpem9udGFsJyA/IGNhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246IE9wY2lvbikgPT5cclxuICAgICAgICAgICAgZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLCBudWxsKVxyXG4gICAgICAgICkgOiBudWxsfTwvPlxyXG59XHJcblxyXG5jb25zdCBub21icmVDYXNpbGxlcm8gPSB7XHJcbiAgICBGOiAnZm9ybXVsYXJpbycsXHJcbiAgICBCOiAnYmxvcXVlJyxcclxuICAgIFA6ICdwcmVndW50YScsXHJcbiAgICBDUDogJ2Nvbmp1bnRvcHJlZ3VudGFzJyxcclxuICAgIE86ICdvcGNpb24nLFxyXG4gICAgT006ICdtdWx0aXBsZScsXHJcbiAgICBGSUxUUk86ICdmaWx0cm8nLFxyXG4gICAgQ09OUzogJ2NvbnNpc3RlbmNpYScsXHJcbiAgICBCRjogJ2JvdG9uZm9ybXVsYXJpbycsXHJcbiAgICBURVhUTzogJ2FjbGFyYWNpb25zdXBlcmlvcicsXHJcbiAgICBQTUFUUklaOiAncHJlZ3VudGFlbmZvcm1hZGVtYXRyaXonLFxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDYXNpbGxlcm8ocHJvcHM6IHtcclxuICAgIGNhc2lsbGVybzogUHJlZ3VudGEgfCBCbG9xdWUgfCBGaWx0cm8gfCBDb25qdW50b1ByZWd1bnRhcyB8IEJvdG9uRm9ybXVsYXJpbyB8IENvbnNpc3RlbmNpYSB8IE9wY2lvbk11bHRpcGxlIHwgVGV4dG8gfCBQTWF0cml6LFxyXG4gICAgaWQ/OiBzdHJpbmcsXHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz86ICdsYXRlcmFsJyB8ICdzdXBlcmlvcidcclxuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfCBSZWFjdC5SZWFjdE5vZGVbXSxcclxuICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiPzogJ1NJJyB8ICdOTycgfCAnSU5IQUJJTElUQVInIHwgdW5kZWZpbmVkXHJcbn0pIHtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAga2V5PXtgJHtwcm9wcy5jYXNpbGxlcm8udGlwb2N9LSR7cHJvcHMuaWQgfHwgcHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YGNhc2lsbGVybyAke25vbWJyZUNhc2lsbGVyb1twcm9wcy5jYXNpbGxlcm8udGlwb2NdfWB9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgICAgICBkZXNwbGllZ3VlLWVuY2FiZXphZG89e3Byb3BzLmNhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbyA/PyBwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkbyA/PyAnc3VwZXJpb3InfVxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3Byb3BzW1wib2N1bHRhci1zYWx0ZWFkYVwiXX1cclxuICAgID57cHJvcHMuY2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByZWd1bnRhRGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgcHJlZ3VudGE6IFByZWd1bnRhLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86ICdsYXRlcmFsJyB8ICdzdXBlcmlvcicsXHJcbiAgICBwYXJhUE1hdHJpej86IHRydWVcclxufSkge1xyXG4gICAgdmFyIHsgcHJlZ3VudGEgfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEpXHJcbiAgICB9KVxyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHZhciBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9XHJcbiAgICBpZiAocHJlZ3VudGEuZGVzcGxpZWd1ZSA9PSAnZ3JpZCcpIHtcclxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xyXG4gICAgICAgIHN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAncmVwZWF0KDMsMWZyKSc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BzLnBhcmFQTWF0cml6ID9cclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICB7Z2V0TG9zTWV0YWRhdG9zKHByZWd1bnRhKX1cclxuICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGEuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICBtaW5pPXt0cnVlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvPlxyXG4gICAgICAgIDogPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICAgICAgbnVlc3Ryby10aXBvdmFyPXtwcmVndW50YS50aXBvdmFyIHx8IFwibXVsdGlwbGVcIn1cclxuICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJlZ3VudGEuZGVzcGxpZWd1ZU9jdWx0YSA/IChwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89e3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvfVxyXG5cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXIgPT0gXCJzaV9ub1wiID8gPEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+IDpcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3ByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk09e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcmVndW50YVNpbXBsZTogUHJlZ3VudGFTaW1wbGUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGEgPyB0cnVlIDogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKHByZWd1bnRhKVxyXG4gICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEuY2FzaWxsZXJvcy5zb21lKG9wY2lvbiA9PiBvcGNpb24uc2FsdG8pID8gXCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIiA6IFwidG9kYXMgbGFzIG9wY2lvbmVzXCJcclxuICAgICAgICAgICAgICAgICAgICApIDogXCJcIn1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBQTWF0cml6RGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgY2FzaWxsZXJvOiBQTWF0cml6LFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG59KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gXHJcbiAgICBjb25zdCBjb2xzID0gKGNhc2lsbGVyby5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSlcclxuICAgICAgICAuZmluZCgob3BjaW9uTXVsdGlwbGUpID0+IG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScpPy5jYXNpbGxlcm9zXHJcbiAgICAgICAgLm1hcCgocHJlZ3VudGEpID0+IHByZWd1bnRhLm5vbWJyZSk7XHJcbiAgICBjb25zdCB0ZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyB0ZXh0QWxpZ246ICdjZW50ZXInLCB3aWR0aDogY29scyA/ICg1NTAgLyAoY29scy5sZW5ndGgpKS50b1N0cmluZygpICsgJ3B4JyA6ICcnIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgICAgICBsZWVyPXtjYXNpbGxlcm8ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICB7Y29scz8ubWFwKChjb2wsIGkpID0+IDx0aCBrZXk9e2l9IHNjb3BlPVwiY29sXCIgc3R5bGU9e3RkU3R5bGV9Pntjb2x9PC90aD4pfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgeyhjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUsIGkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2MgPT0gJ09NJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPntvcGNpb25NdWx0aXBsZS5ub21icmV9PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcGNpb25NdWx0aXBsZS5jYXNpbGxlcm9zLm1hcCgocHJlZ3VudGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEgYXMgdW5rbm93biBhcyBQcmVndW50YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dGQga2V5PXtpZH0gaWQ9e2lkfT48UHJlZ3VudGFEZXNwbGllZ3VlIGZvclBrPXtwcm9wcy5mb3JQa30gcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGF9IGRlc3BsaWVndWVFbmNhYmV6YWRvPVwic3VwZXJpb3JcIiBwYXJhUE1hdHJpej17dHJ1ZX0gLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPjwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOiBSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6IEZvclBrLCBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSk6IEh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+IHtcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuXHJcbiAgICB2YXIgY2FzaWxsZXJvc1BhZHJlID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQa1BhZHJlLmZvcm11bGFyaW9dPy5jYXNpbGxlcm9zPy5jYXNpbGxlcm9zIHx8IFtdO1xyXG4gICAgdmFyIG9yZGVuRm9ybXVsYXJpb3NCZlBhZHJlOiBJZEZvcm11bGFyaW9bXSA9IFtdO1xyXG4gICAgZm9yICh2YXIgY2FzaWxsZXJvIG9mIGNhc2lsbGVyb3NQYWRyZSkge1xyXG4gICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJyAmJiBjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0by5zdGFydHNXaXRoKCdGOicpID8gY2FzaWxsZXJvLnNhbHRvIDogJ0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICBpZiAoIW9yZGVuRm9ybXVsYXJpb3NCZlBhZHJlLmluY2x1ZGVzKGZvcm1IaWpvKSkge1xyXG4gICAgICAgICAgICAgICAgb3JkZW5Gb3JtdWxhcmlvc0JmUGFkcmUucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG9idGVuZXJQb3NpY2lvbkZvcm11bGFyaW8gPSAoZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvKTogbnVtYmVyID0+IHtcclxuICAgICAgICB2YXIgaWR4QmYgPSBvcmRlbkZvcm11bGFyaW9zQmZQYWRyZS5pbmRleE9mKGZvcm11bGFyaW8pO1xyXG4gICAgICAgIGlmIChpZHhCZiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpZHhCZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlkeEVzdHJ1Y3R1cmEgPSBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maW5kSW5kZXgoKGluZm9Gb3JtdWxhcmlvKSA9PiBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyA9PSBmb3JtdWxhcmlvKTtcclxuICAgICAgICByZXR1cm4gaWR4RXN0cnVjdHVyYSA+PSAwID8gMTAwMCArIGlkeEVzdHJ1Y3R1cmEgOiA5OTk5O1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpb1VhID0gKHVhOiBVbmlkYWRBbmFsaXNpcyk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgdmFyIHBvc2ljaW9uZXMgPSBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbykgPT4gaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEudW5pZGFkX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICAubWFwKChpbmZvRm9ybXVsYXJpbykgPT4gb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpbyhpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKTtcclxuICAgICAgICByZXR1cm4gcG9zaWNpb25lcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4ucG9zaWNpb25lcykgOiA5OTk5O1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaGlqYXNGaWx0cmFkYXNZT3JkZW5hZGFzID0gKGxpa2VBcih1YURlZi5oaWphcykpXHJcbiAgICAgICAgLmFycmF5KClcclxuICAgICAgICAuZmlsdGVyKCh1YUhpamEpOiB1YUhpamEgaXMgVW5pZGFkQW5hbGlzaXMgPT5cclxuICAgICAgICAgICAgdWFIaWphICE9IG51bGwgJiZcclxuICAgICAgICAgICAgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3Muc29tZSgoaW5mb0Zvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBvYnRlbmVyUG9zaWNpb25Gb3JtdWxhcmlvVWEoYSkgLSBvYnRlbmVyUG9zaWNpb25Gb3JtdWxhcmlvVWEoYikpO1xyXG5cclxuICAgIHZhciB4ID0gaGlqYXNGaWx0cmFkYXNZT3JkZW5hZGFzLm1hcCh1YUhpamEgPT4gKFxyXG4gICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICd1YS1oaWphcycgfSwgW1xyXG4gICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoclt1YUhpamEudW5pZGFkX2FuYWxpc2lzXSB8fCBbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIoaSkgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7IC4uLmZvclBrUGFkcmUsIFt1YUhpamEucGtfYWdyZWdhZGFdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvID8gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcmFkb3ItdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2JvdG9uZXMtdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcm8tdWEnIH0sIG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZiA9PiBmb3JtRGVmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYS51bmlkYWRfYW5hbGlzaXMgJiYgZm9ybXNWaXZpZW5kYS5pbmNsdWRlcyhmb3JtRGVmLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFycmF5KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gb2J0ZW5lclBvc2ljaW9uRm9ybXVsYXJpbyhhLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykgLSBvYnRlbmVyUG9zaWNpb25Gb3JtdWxhcmlvKGIuY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChpbmZvRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybXVsYXJpbyA9IGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0geyAuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZXNwbGllZ3VlT2N1bHRhOiBmYWxzZSwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogJycsIG5vbWJyZTogZm9ybXVsYXJpbywgYWNsYXJhY2lvbjogbnVsbCwgc2FsdG86IGZvcm11bGFyaW8gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHJlc3B1ZXN0YXNIaWphLCB1YUhpamEudW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQa0hpamFQYXJjaWFsLCBmZWVkYmFja0FsbClcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICApKTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBUZXh0bywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgdGV4dG8tJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybyA9PSAnUmVzRm9yJyBhcyBJZENhc2lsbGVybzsgLy8gVE9ETzogQ2FtYmlhIGVzdG8gcXVlIGVzdMOhIGphcmNvZGVhZG8uXHJcbiAgICBpZiAoZXNSZXN1bWVuRm9ybXVsYXJpbykge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHJlc3B1ZXN0YXMgc29uIHJlc3B1ZXN0YXNSYWl6IHBvcnF1ZSBSZXNGb3IgZXN0w6EgZW4gZWwgZm9ybSBwcGFsXHJcbiAgICAgICAgICAgICAgICBpZiAoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcyB9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IGRlZkJvdG9uLmZvclBrIH0pO1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2Ake2lkfS1leHRlcm5vYH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbyA/XHJcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD1cImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6IHsgZmlsdHJvOiBGaWx0cm8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBmaWx0cm8gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQ29uc2lzdGVuY2lhLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGBjb25zaXN0ZW5jaWEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgPVxyXG4gICAgKHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgZXNBZ3JlZ2FyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQ29uZmlybWFyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIHBlcm1pdGVCb3JyYXI6IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBmYWxzZSwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4sIHVuaWNvOiB0cnVlIH0pXHJcbiAgICAmIHsgZXNDb25maXJtYXI/OiB0cnVlLCBlc0FncmVnYXI/OiB0cnVlLCBwZXJtaXRlQm9ycmFyPzogYm9vbGVhbiwgcGVybWl0ZUJvcnJhckdhYmluZXRlPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkLCBlc3RhZG9Cb3Rvbj86IHN0cmluZyB9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsXHJcbiAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86IHsgZGVzcGxpZWd1ZU9jdWx0YT86IGJvb2xlYW4gfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzogc3RyaW5nLCBhY2xhcmFjaW9uOiBzdHJpbmcgfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzogc3RyaW5nLCBub21icmU/OiBzdHJpbmcsIHNhbHRvOiBzdHJpbmcgfCBudWxsLCBlc3BlY2lhbD86IGFueSB9LFxyXG4gICAgZm9yUGtQYWRyZTogRm9yUGssXHJcbiAgICBpZEJ1dHRvbjogc3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjogRm9ybXVsYXJpbyxcclxuICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbz86IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGspID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgICB2YXIgZm9yUGs6IEZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQaykgKyAoZGVmQm90b24uZXNDb25maXJtYXIgPyAnLWxpc3RvJyA6ICcnKTtcclxuICAgIHZhciBpZCA9IGBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YDtcclxuICAgIHZhciBlc3RhZG8gPSBmZWVkYmFja0Zvcm0ucmVzdW1lbjtcclxuICAgIHJldHVybiBodG1sLnRyKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBjbGFzczogXCJzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW9cIixcclxuICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOiBkZWZCb3Rvbi5hY3R1YWwgPyAnYWN0dWFsJyA6IGRlZkJvdG9uLnByZXZpbyA/ICd2YWxpZGEnIDogKGRlZkJvdG9uLmVzdGFkb0JvdG9uIHx8ICd0b2RhdmlhX25vJyksXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOiBjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjogXCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjogSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pXHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgaHRtbC50ZCh7IGNsYXNzOiBcImFjbGFyYWNpb25cIiB9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIGh0bWwudGQoe1xyXG4gICAgICAgICAgICBjb2xzcGFuOiAoZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKSA/XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuLmxlbmd0aCA/PyAxKSArIChjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDogYGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50OiBkZWZCb3Rvbi5hY3R1YWwgPyBcImNvbnRhaW5lZFwiIDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5lc0NvbmZpcm1hcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdG86IGNhc2lsbGVyby5zYWx0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNpb25IYWJpbGl0YXI6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RvVmFsb3I6IGRlZkJvdG9uLm51bSBhcyBWYWxvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FyVmFsb3I6IDEgYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFyVmFsb3I6IGRlZkJvdG9uLm51bSBhcyBWYWxvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6IGVzdGFkbyAhPSAndmFjaW8nID8gZXN0YWRvIDogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyBlc3RhZG8gOiAoZGVmQm90b24uZXN0YWRvQm90b24gfHwgJ3RvZGF2aWFfbm8nKSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICwgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAoZGVmQm90b24uZXNBZ3JlZ2FyID8gJ2FncmVnYXInIDogZGVmQm90b24uZXNDb25maXJtYXIgPyAnTGlzdG8nIDogY2FzaWxsZXJvLm5vbWJyZSArICcgJyArIChkZWZCb3Rvbi5udW0gfHwgJycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IChkZWZCb3Rvbi5lc0FncmVnYXIgPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZCA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5DaGVjayA6IGNhc2lsbGVyby5zYWx0byA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRm9yd2FyZCA6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRXhpdFRvQXBwKSwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ucGVybWl0ZUJvcnJhciB8fCBkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyR2FiaW5ldGUgP1xyXG4gICAgICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJvdG9uLWJvcnJhci11YS12YWNpYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWFyZ2luTGVmdDogJzhweCcgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5EZWxldGVGb3JldmVyLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7IGZvclBrLCBmb3JQa1BhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyUmVzcHVlc3Rhc0JvdG9uRm9ybXVsYXJpbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0bzogY2FzaWxsZXJvLnNhbHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc2lvbkhhYmlsaXRhcjogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG9WYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFncmVnYXJWYWxvcjogZGVmQm90b24ubnVtID09PSAxID8gKG51bGwgYXMgdW5rbm93biBhcyBWYWxvcikgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFyVmFsb3I6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlICYmIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvKGRlZkJvdG9uLCBmb3JQa1BhZHJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpLFxyXG4gICAgICAgICAgICAoZGVmQm90b24uZXNDb25maXJtYXIgJiYgY2FzaWxsZXJvLnNhbHRvICYmIHJlc3B1ZXN0YXNBdW1lbnRhZGFzWyckQi5GOicgKyAoY2FzaWxsZXJvLnNhbHRvLnN1YnN0cmluZygwLCAyKSA9PSAnRjonID8gY2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpIDogY2FzaWxsZXJvLnNhbHRvKSBhcyBJZFZhcmlhYmxlXSAhPSBudWxsID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1kZXNoYWNlci1saXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWFyZ2luTGVmdDogJzhweCcgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkRlc2hhY2VyIExpc3RvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBtYXJnaW5MZWZ0OiAnNHB4JywgaGVpZ2h0OiAnMjBweCcsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyUmVzcHVlc3Rhc0JvdG9uRm9ybXVsYXJpbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsdG86IGNhc2lsbGVyby5zYWx0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc2lvbkhhYmlsaXRhcjogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0b1ZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FyVmFsb3I6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhclZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICBdKSxcclxuICAgICAgICAoZGVmQm90b24ubnVtICE9PSBmYWxzZSAmJiAhZGVmQm90b24uZXNBZ3JlZ2FyICYmICFkZWZCb3Rvbi5lc0NvbmZpcm1hciA/XHJcbiAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4gPz8gWy8qZGVmQm90b24ubnVtLnRvU3RyaW5nKCkqL10pLm1hcChcclxuICAgICAgICAgICAgICAgIChjYW1wbzogc3RyaW5nKSA9PiBodG1sLnRkKChyZXNwdWVzdGFzQXVtZW50YWRhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bZGVmQm90b24ubnVtIC0gMV1bY2FtcG8gYXMgSWRWYXJpYWJsZV0gPz8gJycpLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAge2RlZkJvdG9uLmVzQWdyZWdhcj88PiA8c3Bhbj4gIDwvc3Bhbj4gPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPjxJQ09OLkNoZWNrLz48L0J1dHRvbj48Lz46bnVsbH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICAqL1xyXG4gICAgXSkuY3JlYXRlKClcclxufVxyXG5cclxudmFyIGJ1c2Nhckhub3NGb3JtdWxhcmlvID0gKGlkRm9ybXVsYXJpb0Rlc3Rpbm86IElkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgdWEgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgcmV0dXJuIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgIC5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgX2lkRm9ybTogSWRGb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YVxyXG4gICAgICAgICkubWFwKChfaW5mb0Zvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvLCBpZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaWRGb3JtXHJcbiAgICAgICAgKS5hcnJheSgpXHJcbn1cclxuXHJcbnZhciBjaGVja0Zvcm1zVmFjaW9zID0gKGZvcm1zOiBJZEZvcm11bGFyaW9bXSwgZmVlZGJhY2tBbGw6IHtcclxuICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG59LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHJldHVybiBmb3Jtcy5maWx0ZXIoKGZvcm06IElkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgIGxldCBteWZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogZm9ybSB9O1xyXG4gICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhteWZvclBrKV07XHJcbiAgICAgICAgcmV0dXJuIGZlZWRiYWNrLnJlc3VtZW4gIT0gJ3ZhY2lvJ1xyXG4gICAgfSkubGVuZ3RoID09IDBcclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IEJvdG9uRm9ybXVsYXJpbywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIsIGlkRm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgeyBmb3JtdWxhcmlvQUFicmlyIH0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOiBDYXNvU3RhdGUpID0+ICh7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLFxyXG4gICAgfSkpO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspO1xyXG4gICAgLypcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDpgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIGF0dHI6J2VzdGEtaW5oYWJpbGl0YWRhJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3Iocik/J1NJJzonTk8nXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PidOTydcclxuICAgIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTEJ1dHRvbkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgcHJvcDonZGlzYWJsZWQnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT4haGFiaWxpdGFkb3IocilcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+ZmFsc2VcclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbY29uZmlybWFyRm9yemFySXIsIHNldENvbmZpcm1hckZvcnphcklyXSA9IHVzZVN0YXRlPERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgfCBmYWxzZSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtjb25maXJtYWNpb25Cb3JyYWRvLCBzZXRDb25maXJtYWNpb25Cb3JyYWRvXSA9IHVzZVN0YXRlPHtkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGssIGRhdG9zOiBhbnl9IHwgbnVsbD4obnVsbCk7XHJcbiAgICB2YXIgW2ZyYXNlQm9ycmFkbywgc2V0RnJhc2VCb3JyYWRvXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIHZhciBbZXJyb3JGcmFzZUJvcnJhZG8sIHNldEVycm9yRnJhc2VCb3JyYWRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIHZhciBwZXJtaXRlQm9ycmFyR2FiaW5ldGUgPSBnZXREYXRvc0J5UGFzcygpLnBlcm1pdGVCb3JyYXJFbGVtZW50b3NVQSA/PyBmYWxzZTtcclxuICAgIHZhciBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8gPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrKSA9PiB7XHJcbiAgICAgICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUpXHJcbiAgICAgICAgdmFyIGRhdG9zSGlqb3MgPSByZXNwdWVzdGFzW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXVsoZGVmQm90b24ubnVtIHx8IDEpIC0gMV07XHJcbiAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyh7IGRlZkJvdG9uLCBmb3JQa1BhZHJlLCBkYXRvczogZGF0b3NIaWpvcyB9KTtcclxuICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpO1xyXG4gICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICB2YXIgbXVsdGlwbGVGb3JtdWxhcmlvcyA9IGZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgICAvLyB2YXIgdmFyX25hbWU9JyRCLicrY2FzaWxsZXJvLnNhbHRvOyAvL29yaWdpbmFsXHJcbiAgICB2YXIgaWRTZWNjaW9uID0gYHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke0JGX2xpc3RvfWA7XHJcbiAgICB2YXIgaWRCdXR0b24gPSBgc3BlY2lhbC1idXR0b24tJHtpZFNlY2Npb259YDtcclxuICAgIHZhciB2YXJfbmFtZV9yZWdpc3RybyA9IG11bHRpcGxlRm9ybXVsYXJpb3MgPyBCRl9hZ3JlZ2FyIDogQkZfbGlzdG87XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOiBpZFNlY2Npb24sXHJcbiAgICAgICAgdmFyaWFibGU6IHZhcl9uYW1lX3JlZ2lzdHJvLFxyXG4gICAgICAgIGZvclBrOiBmb3JQayxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrUm93OiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZGl2OiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHtcclxuICAgICAgICAgICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2xpc3RvID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbQkZfbGlzdG9dPy5lc3RhZG8gfHwgJ3ZhbGlkYSc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2FncmVnYXIgPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gKGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2FncmVnYXJdPy5lc3RhZG8gfHwgJ3ZhbGlkYScpIDogJ3ZhbGlkYSc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2dlbmVyYWwgPSBlc3RhZG9fYWdyZWdhciAhPT0gJ3ZhbGlkYScgPyBlc3RhZG9fYWdyZWdhciA6IGVzdGFkb19saXN0bztcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkaXYsICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkb19nZW5lcmFsKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkaXYsICd0aWVuZS12YWxvcicsIGVzdGFkb19nZW5lcmFsID09PSAndmFsaWRhJyA/ICd2YWxpZG8nIDogJ05PJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RhRGVCb3RvbmVzQWJyaXI6IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gISFmZWVkYmFja1Jvdy5hY3R1YWw/LnN0YXJ0c1dpdGgoQkZfbGlzdG8pO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGVGb3JtdWxhcmlvcyAmJiBjYXNpbGxlcm8uc2FsdG8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmVUEgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uanVudG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbnRpZGFkRXNwZXJhZGEgPSByZXNwdWVzdGFzQXVtZW50YWRhc1tjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQWN0dWFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc3RhZG9EZWxCb3RvbiAnICtlc3RhZG9EZWxCb3RvbiAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvID8gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBsaWtlQXIoY29uanVudG8pLm1hcCgoXywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOiBudW1iZXIgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoaSwgY29uanVudG8pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106IG51bSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybUhub3MgPSBidXNjYXJIbm9zRm9ybXVsYXJpbyhpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUFjdHVhbCA9PSBudWxsICYmIGZlZWRiYWNrLnJlc3VtZW4gPT0gXCJ2YWNpb1wiICYmIGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BY3R1YWwgPSBudW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bUFjdHVhbCwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBudW1BY3R1YWwgPT0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXI6IGxpa2VBcihjb25qdW50bykuYXJyYXkoKS5sZW5ndGggPT0gTnVtYmVyKGkpICsgMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9ybXNWYWNpb3MoZm9ybUhub3MsIGZlZWRiYWNrQWxsLCBmb3JQaykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSAvKlwicHVlZGUgYWdyZWdhciAvL1RPRE8gVkVSIEVTVE9cIiovICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudWV2b1ZhbG9yUGsgPSAoY29uanVudG8gPT0gbnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106IG51ZXZvVmFsb3JQayB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdG9QcmVzaW9uYWRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbQkZfbGlzdG9dICE9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWJlQWdyZWdhck9saXN0byA9IG51bUFjdHVhbCA9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYW50aWRhZEVzcGVyYWRhID09IG51bGwgfHwgY2FudGlkYWRFc3BlcmFkYSAhPSAoY29uanVudG8gIT0gbnVsbCAmJiBjb25qdW50by5sZW5ndGgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIWxpc3RvUHJlc2lvbmFkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAoZXN0YWRvRGVsQm90b24gPT0gJ3ZhbGlkYScgfHwgZXNWYXJBY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06IG51ZXZvVmFsb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogZGViZUFncmVnYXJPbGlzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWRvQm90b246IGVzdGFkb19nZW5lcmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06IG51ZXZvVmFsb3JQayAtIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0NvbmZpcm1hcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogZGViZUFncmVnYXJPbGlzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWRvQm90b246IGVzdGFkb19nZW5lcmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc1ByZXZpb1VuaWNvID0gZXN0YWRvX2dlbmVyYWwgPT0gJ3ZhbGlkYScgfHwgKGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldPy5yZXN1bWVuICE9IG51bGwgJiYgZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV0/LnJlc3VtZW4gIT0gJ3ZhY2lvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IFt7IGZvclBrLCBudW06IGZhbHNlLCB1bmljbzogdHJ1ZSwgYWN0dWFsOiBlc1ZhckFjdHVhbCwgcHJldmlvOiBlc1ByZXZpb1VuaWNvLCBlc3RhZG9Cb3RvbjogZXN0YWRvX2dlbmVyYWwgfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3RvbiA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldID8/IHsgcmVzdW1lbjogJ3ZhY2lvJyB9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXIsIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkb1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuIHx8IFtdKSkuYXJyYXkoKS5tYXAoYyA9PiBjKTtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwudGFibGUoeyBjbGFzczogYHRhYmxlIHRhYmxlLXN0cmlwZWQgJHtub21icmVzQ2FtcG9zUmVzdW1lbi5sZW5ndGggPyAndy1hdXRvJyA6ICcnfWAgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGhlYWQoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRyKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID8gaHRtbC50aCgpIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudGgoY2FzaWxsZXJvLm5vbWJyZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub21icmVzQ2FtcG9zUmVzdW1lbi5tYXAoKG5vbWJyZUNhbXBvKSA9PiBodG1sLnRoKG5vbWJyZUNhbXBvIGFzIHN0cmluZykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGJvZHkoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b2Rvc0xvc0JvdG9uZXNcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdlc3RvLCBGQUxMw4kgJyArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MpIHtcclxuICAgICAgICAgICAgICAgIChudWV2YUZvclBrIGFzIGFueSlbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQWdyZWdhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyUmVzcHVlc3Rhc0JvdG9uRm9ybXVsYXJpbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmU6IHByb3BzLmZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWx0bzogY2FzaWxsZXJvLnNhbHRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNpb25IYWJpbGl0YXI6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0b1ZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFncmVnYXJWYWxvcjogMSBhcyBWYWxvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFyVmFsb3I6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaSBhYnJvIHVubyBleGlzdGVudGUsIHRhbWJpw6luIHJlc2V0ZW8gZWwgbGlzdG8gcGFyYSBmb3J6YXIgcXVlIHZ1ZWx2YW4gYSBhcHJldGFybG8gc2kgY2FtYmlhbiBhbGdvXHJcbiAgICAgICAgICAgICAgICAgICAgLy9kaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6IHRydWUgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlybWFyRm9yemFySXIpIHsgc2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAge211bHRpcGxlRm9ybXVsYXJpb3MgJiYgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2FncmVnYXJ9IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPn1cclxuICAgICAgICA8c3BhbiBpZD17J3Zhci0nICsgQkZfbGlzdG99IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gY29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgIHtjb25maXJtYWNpb25Cb3JyYWRvICYmIChcclxuICAgICAgICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbkNsb3NlPXsoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTsgXHJcbiAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpOyBcclxuICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTsgXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlPkFkdmVydGVuY2lhOiBTZSBwZXJkZXLDoW4gZGF0b3M8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7YEVzdMOhIHBvciBib3JyYXIgZWwgZm9ybXVsYXJpbyAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb30gKCR7ZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tlc3RydWN0dXJhLmZvcm11bGFyaW9zW2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNdLnBrX2FncmVnYWRhfTogJHtjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLm51bX0pLiBMb3MgZGF0b3MgZGVsIG1pc21vIHkgdG9kb3Mgc3VzIHJlZ2lzdHJvcyBhc29jaWFkb3Mgc2UgcGVyZGVyw6FuLiDCv0Rlc2VhIGNvbnRpbnVhcj9gfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmEgY29uZmlybWFyIGVsIGJvcnJhZG8sIGVzY3JpYmEgbGEgZnJhc2UgPHN0cm9uZz5cImZvcnphciBib3JyYWRvXCI8L3N0cm9uZz4gYSBjb250aW51YWNpw7NuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImlucHV0LWZvcnphci1ib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZnJhc2VCb3JyYWRvfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t3aWR0aDogJzEwMCUnLCBwYWRkaW5nOiAnOHB4JywgYm9yZGVyOiBlcnJvckZyYXNlQm9ycmFkbyA/ICcxcHggc29saWQgcmVkJyA6ICcxcHggc29saWQgI2NjYycsIGJvcmRlclJhZGl1czogJzRweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmb3J6YXIgYm9ycmFkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JGcmFzZUJvcnJhZG8gJiYgPGRpdiBzdHlsZT17e2NvbG9yOiAncmVkJywgbWFyZ2luVG9wOiAnNXB4JywgZm9udFNpemU6ICcwLjg1ZW0nfX0+TGEgZnJhc2UgaW5ncmVzYWRhIGVzIGluY29ycmVjdGEuPC9kaXY+fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxMHB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PkRhdG9zIHF1ZSBzZSBwZXJkZXLDoW46PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6ICc2MDBweCcsIG1hcmdpbjogJzAgYXV0bycsIGZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFJlbmRlcml6YWRvckpTT04gZGF0b3M9e2NvbmZpcm1hY2lvbkJvcnJhZG8uZGF0b3N9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlybWFjaW9uQm9ycmFkbykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYXNlQm9ycmFkby50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJmb3J6YXIgYm9ycmFkb1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LWZvcnphci1ib3JyYWRvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7ZGVmQm90b24sIGZvclBrUGFkcmV9ID0gY29uZmlybWFjaW9uQm9ycmFkbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhclJlc3B1ZXN0YXNCb3RvbkZvcm11bGFyaW8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHRvOiBjYXNpbGxlcm8uc2FsdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNpb25IYWJpbGl0YXI6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG9WYWxvcjogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhclZhbG9yOiBkZWZCb3Rvbi5udW0gPT09IDEgPyAobnVsbCBhcyB1bmtub3duIGFzIFZhbG9yKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhclZhbG9yOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9fT5Cb3JyYXIgZGUgdG9kYXMgZm9ybWFzPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2FzaWxsZXJvRGVzY29ub2NpZG8ocHJvcHM6IHsgY2FzaWxsZXJvOiBDYXNpbGxlcm9CYXNlLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGs6IEZvclBrKSB7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHtcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiBzdGF0ZS5vcGNpb25lcy5tb2RvRGVzcGxpZWd1ZSxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgbGV0IHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gPERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfSAvPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz4gOiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6IHsgYmxvcXVlT0Zvcm11bGFyaW86IEJsb3F1ZSB8IEZvcm11bGFyaW8gfCBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrLCBtdWx0aXBsZTogYm9vbGVhbiB9KSB7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm8gfCBudWxsPihudWxsKTtcclxuICAgIGlmIChwYXJjaWFsaXphYmxlKSB7XHJcbiAgICAgICAgaWYgKGZvclBrQWN0dWFsICE9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybykge1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwgMjUwKVxyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0YnKSB7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLCB2ZXJUb2RvXSlcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJyAmJiB2ZXJUb2RvKSB7XHJcbiAgICAgICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbCB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsIHx8IHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZyB8IG51bGwsIHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZyB8IG51bGwpIGFzIElkVmFyaWFibGUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZiAoZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKV0ucmVzdW1lbiA9PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvID8gbnVsbCA6IDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBcIjUwMHB4XCIsIHRleHRBbGlnbjogJ2NlbnRlcicsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLCB3aWR0aDogJzEwMCUnLCBwb3NpdGlvbjogXCJmaXhlZFwiLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuMyknLCBmb250U2l6ZTogJzIwMCUnIH19ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jICsgJy0nICsgY2FzaWxsZXJvLmlkX2Nhc2lsbGVybyArICctJyArIGk7XHJcbiAgICAgICAgICAgIHJldHVybiAodmVyVG9kbyB8fCBpIDwgbGltaXRlTm9WZXJUb2RvID9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCIgPyA8UHJlZ3VudGFEZXNwbGllZ3VlIGtleT17a2V5fSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IGRlc3BsaWVndWVFbmNhYmV6YWRvPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdDUCcgPyAnbGF0ZXJhbCcgOiAnc3VwZXJpb3InKX0gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCIgPyA8QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCIgPyA8RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJGXCIgPyA8Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCIgPyA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIiA/IDxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJURVhUT1wiID8gPFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQTUFUUklaXCIgPyA8UE1hdHJpekRlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCIgPyA8TGlicmVEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBpID09IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9JyRzcGlubmVyJyBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICB9PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJsb3F1ZURlc3BsaWVndWUocHJvcHM6IHsgYmxvcXVlOiBCbG9xdWUsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBibG9xdWUsIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBrZXkgPSBibG9xdWUudmVyX2lkICE9ICctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcCA9IDA7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAhIWJsb3F1ZS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbGlzdGEgPSBbeyBmb3JQaywga2V5OiAwLCBtdWx0aXBsZTogZmFsc2UgfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTogJ2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ3Vuc2V0JyA6ICdub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlID8gJ1NJJyA6ICdOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoeyBrZXksIGZvclBrLCBtdWx0aXBsZSB9KSA9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0gLz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOiB7IHRhbWFubmlvOiBudW1iZXIsIGRlbm9taW5hY2lvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZSA9IHRhbWFubmlvICsgXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7IGZvbnRTaXplOiBwcm9wcy50YW1hbm5pbyArICdweCcgfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhcnJhRGVOYXZlZ2FjaW9uKHByb3BzOiB7IGZvclBrOiBGb3JQaywgc29sb0xlY3R1cmE6IGJvb2xlYW4sIG1vZG9EaXJlY3RvOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGNvbnN0IFtjb25maXJtYUNlcnJhciwgc2V0Q29uZmlybWFDZXJyYXJdID0gdXNlU3RhdGU8Ym9vbGVhbiB8IG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgdmFyIHRhcmVhID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYTtcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJlbW92ZUNTU0J5SWQoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICAgICAgZ290b0NvbnNpc3RpcihcclxuICAgICAgICAgICAgZXN0cnVjdHVyYS5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvID0gW107XHJcbiAgICBpZiAoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKSB7XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJ2hkcicsIGFicjogJ0hkUicsIGlkOiBJRF9CT1RPTl9WT0xWRVJfSERSLCBsYWJlbDogJ0hvamEgZGUgUnV0YScsIHJldHJvY2VzbzogMCB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLCBpKSA9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICd2b2x2ZXInLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gaSB9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJycsIGFicjogZm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCAnJyksIGxhYmVsOiBmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286IDAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6IHByb3BzLm1vZG9EaXJlY3RvID8gSURfQk9UT05fQ0VSUkFSIDogSURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VtZW5Fc3RhZG8gPSBnZXRSZXN1bWVuRXN0YWRvRm9yVGFyZWEociBhcyBSZXNwdWVzdGFzUmFpeiwgdGFyZWEgYXMgSWRUYXJlYSlcclxuICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIHJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOiBNb2RvRGVzcGxpZWd1ZSkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7IG1vZG9EZXNwbGllZ3VlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhID8gJ3NpJyA6ICdubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYiwgaSkgPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlID09IGZvclBrLmZvcm11bGFyaW8gPyBcInByaW1hcnlcIiA6IFwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IGIucmV0cm9jZXNvIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBiLnJldHJvY2Vzb10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHtiLnF1ZSA9PSAnaGRyJyA/IDxJQ09OLkFzc2lnbm1lbnQgLz4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAxMHB4JyB9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PiA6IG51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17eyBtYXJnaW46ICcwIDAgMCAzMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcCAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PlxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8gPyA8ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+IDogJyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXywgaykgPT4gayAhPSAnZm9ybXVsYXJpbycpLm1hcCgodiwgaykgPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dXA+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIlBERlwiKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJtZXRhZGF0b3NcIil9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbj1cIm11eSBjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb249XCJjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb249XCJub3JtYWxcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uPVwiZ3JhbmRlXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbj1cImVub3JtZVwiIC8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6ICFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzIH0pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0gLz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6ICFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY28gfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvRmFzdFNldHVwPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkge1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBvcGNpb25lczogc3RhdGUub3BjaW9uZXMgfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAgPEJ1dHRvbiBpZD17aWR9IGNsYXNzTmFtZT1cImJvdG9uLXZvbHZlclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlc1ZvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIDFdIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IDEgfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUilcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm90b25DZXJyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b25DZXJyYXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiA8SUNPTi5DaGV2cm9uTGVmdCAvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICB2YXIgeyBmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgb3BjaW9uZXMgfVxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCB0YXJlYSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZ2V0RXN0cnVjdHVyYSgpLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBhcnJpYmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKTtcclxuICAgICAgICAgICAgaWYgKGFycmliYSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciArIDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhYmFqbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJyk7XHJcbiAgICAgICAgICAgIGlmIChhYmFqbykge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyICE9IG51bGwgJiYgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAtIDIwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQ2FzbyA9IGxpa2VBcihmb3JQaykuZmluZCgoXywgaykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gayAhPSAnZm9ybXVsYXJpbydcclxuICAgICAgICB9KT8udG9TdHJpbmcoKTtcclxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSBnZXRFc3RydWN0dXJhKCkub3BlcmF0aXZvICsgJy0gJyArIGlkQ2FzbztcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgY29udHJvbFNjcm9sbCgpO1xyXG4gICAgICAgIGNhbGN1bGFyQ29tb2RpbmVzKGZvclBrKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDogYW55XHJcbiAgICB2YXIgY29tcGxldG86IGFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKSA9PiB7XHJcbiAgICAgICAgdmFyIHsgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsKSB7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUodmFyaWFibGVBY3R1YWwpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGxpc3RhTW9kb3M6IE1vZG9EZXNwbGllZ3VlW10gPSBbJ21ldGFkYXRvcycsICdyZWxldmFtaWVudG8nLCAnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bWVuRXN0YWRvID0gZ2V0UmVzdW1lbkVzdGFkb0ZvclRhcmVhKHIgYXMgUmVzcHVlc3Rhc1JhaXosIHRhcmVhIGFzIElkVGFyZWEpXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgZXNWb2x2ZXIgPyBmZWVkYmFja0Zvcm0ucmVzdW1lbiA6IHJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzcGVjaWFsIGhheSBxdWUgbGVlcmxvIGVuIGVsIHBhcnNlciBkZSBjYXNpbGxlcm9zIHNpIGVzdG8gdGVybWluYSBxdWVkYW5kbyBhc8OtXHJcbiAgICB2YXIgcGFudGFsbGFDb21wbGV0YSA9IGZvcm11bGFyaW8uZXNwZWNpYWw/LnBhbnRhbGxhQ29tcGxldGE7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYX1cclxuICAgICAgICAgICAgICAgIGJhcnJhTmF2Rm9ybXVsYXJpbz17XHJcbiAgICAgICAgICAgICAgICAgICAgPEJhcnJhRGVOYXZlZ2FjaW9uIGZvclBrPXtmb3JQa30gc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhIHx8IGZhbHNlfSBtb2RvRGlyZWN0bz17b3BjaW9uZXMubW9kb0RpcmVjdG99IC8+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJtaW5pLWNvbnNvbGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9BcHBCYXJQcmluY2lwYWw+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIGNsYXNzTmFtZT1cImZvcm11bGFyaW9cIiBtb2RvLWRlc3BsaWVndWU9e21vZG9EZXNwbGllZ3VlfSB2ZXItbnVtLW9wY2lvbmVzPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzID8gJ1NJJyA6ICdOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIiAvPn1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfSAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIgLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZXNwYWNpby1maW5hbC1mb3JtdWxhcmlvJz48L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhICYmIG9wY2lvbmVzLmZvclBrID8gPERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfSAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczogeyBub21icmU6IHN0cmluZywgdmFsb3I6IGFueSB9KSB7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IgIT0gbnVsbCAmJiBwcm9wcy52YWxvciAhPSAnJyA/IDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmUgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPiA6IG51bGxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOiBFc3RhZG9DYXJnYVtdID0gWydyZXN1bWVuJywgJ3JlbGV2YW1pZW50bycsICdyZWNpYm8nXTtcclxuZXhwb3J0IHZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHsgbm9tYnJlOiAnUkVBJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcIm9rXCIgfSxcclxuICAgIHsgbm9tYnJlOiAnQ2l0YSBwYWN0YWRhJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcImNpdGEgcGFjdGFkYVwiIH0sXHJcbiAgICB7IG5vbWJyZTogJ1BlbmRpZW50ZXMnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwidmFjaW9cIiB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHsgbm9tYnJlOiAnT3Ryb3MnLCBmOiByZXN1bWlkb3Jlcy5yZWR1Y2UoKGcsIHIpID0+IChyciA9PiAhci5mKHJyKSAmJiBnKHJyKSksIChfOiBSZXNwdWVzdGFzUmFpeikgPT4gdHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGUgPSAocHJvcHM6IHtcclxuICAgIG51bVZpdmllbmRhOiBJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6IElkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzUmFpeixcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsOiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXREZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IChsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlKSA9PiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IGxpbmVhUmVzdW1lblVBUHJpbmNpcGFsO1xyXG5cclxuc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwoKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IHtcclxuICAgIGNvbnN0IHsgbnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkID0gJ3Zpdi0nICsgbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZm9yUGs6IEZvclBrID0geyBmb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLCBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogTnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuYyB9IGFzIEZvclBrOyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKTtcclxuICAgIH0sIFtudW1WaXZpZW5kYSwgZm9ybVByaW5jaXBhbF0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmFcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZiAocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VtZW5Fc3RhZG8gPSBnZXRSZXN1bWVuRXN0YWRvRm9yVGFyZWEociBhcyBSZXNwdWVzdGFzUmFpeiwgdGFyZWEgYXMgSWRUYXJlYSlcclxuICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIHJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPFRhYmxlUm93IGtleT17bnVtVml2aWVuZGF9PlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0ZW0gP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXSA9PSBcImNpdGEgcGFjdGFkYVwiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrLCBhcGlsYXJWdWVsdGE6IGZhbHNlIH0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufSk7XHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJDYXJnYVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGNhcmdhOiBDYXJnYSxcclxuICAgIGlkQ2FyZ2E6IElkQ2FyZ2EsXHJcbiAgICBwb3NpY2lvbjogbnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6IEluZm9ybWFjaW9uSGRyLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPlxyXG4gICAgfVxyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgRGVzcGxlZ2FyQ2FyZ2E6IERlc3BsZWdhckNhcmdhVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldERlc3BsZWdhckNhcmdhID0gKGRlc3BsaWVndWVDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlKSA9PiBEZXNwbGVnYXJDYXJnYSA9IGRlc3BsaWVndWVDYXJnYTtcclxuXHJcbnNldERlc3BsZWdhckNhcmdhKChwcm9wczoge1xyXG4gICAgY2FyZ2E6IENhcmdhLFxyXG4gICAgaWRDYXJnYTogSWRDYXJnYSxcclxuICAgIHBvc2ljaW9uOiBudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjogSW5mb3JtYWNpb25IZHIsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+XHJcbiAgICB9XHJcbn0pID0+IHtcclxuICAgIGNvbnN0IHsgY2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgbGV0IGNhbnRMaW5lYXNSZXN1bWVuID0gbGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKSA9PiBpbmZvcm1hY2lvbi50ZW0uY2FyZ2EgPT0gaWRDYXJnYSkuYXJyYXkoKS5sZW5ndGg7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCcgfX0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmdhXCI+w4FyZWE6IHtpZENhcmdhfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9ic2VydmFjaW9uZXNcIj57Y2FyZ2Eub2JzZXJ2YWNpb25lc308L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVjaGFcIj57Y2FyZ2EuZmVjaGF9PC9kaXY+XHJcbiAgICAgICAgICAgIHsvKlxyXG4gICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIHtsaXN0YUVzdGFkb3NDYXJnYS5tYXAoZXN0YWRvX2NhcmdhPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXtlc3RhZG9fY2FyZ2F9IHZhcmlhbnQ9e2VzdGFkb19jYXJnYT09Y2FyZ2EuZXN0YWRvX2NhcmdhP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuRVNUQURPX0NBUkdBKHtpZENhcmdhLCBlc3RhZG9fY2FyZ2F9KSlcclxuICAgICAgICAgICAgICAgIH0+e2VzdGFkb19jYXJnYX08L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgKi99XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2NhcmdhLmVzdGFkb19jYXJnYSA9PSBudWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2EgPT0gJ3JlbGV2YW1pZW50bycgP1xyXG4gICAgICAgICAgICA8VGFibGUgY2xhc3NOYW1lPVwidGFibGEtY2FyZ2EtaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCI3NSVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiMTAlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjE1JVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAge2NhbnRMaW5lYXNSZXN1bWVuID9cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEuMnJlbVwiIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZG9taWNpbGlvPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmVuYzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDxUYWJsZUJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbikgPT4gaW5mb3JtYWNpb24udGVtLmNhcmdhID09IGlkQ2FyZ2EpLm1hcCgoaW5mb3JtYWNpb24sIG51bVZpdmllbmRhKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE9e2luZm9ybWFjaW9uLnRhcmVhLnRhcmVhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1QcmluY2lwYWw9e2luZm9ybWFjaW9uLnRhcmVhLm1haW5fZm9ybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXJnYS5wdWVkZV9hdXRvZ2VuZXJhciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2EtbnVldm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGNvbFNwYW49ezN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RvRE0gPT0gXCJjYXBhXCIgPyBcInN1Y2Nlc3NcIiA6IFwicHJpbWFyeVwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhckVuY3Vlc3RhKGlkQ2FyZ2EsIChmb3JQa1JhaXo6IEZvclBrUmFpeikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogZm9yUGtSYWl6LCBhcGlsYXJWdWVsdGE6IGZhbHNlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5BZGQgLz4gTnVldm8gY3Vlc3Rpb25hcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgICAgICA8L1RhYmxlPiA6XHJcbiAgICAgICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3sgZm9udFNpemU6IFwiMS4ycmVtXCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcyB9KSB7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXMgfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19IC8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxubGV0IG9yZGVuUG9yRGVmZWN0b0dsb2JhbDogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiBQZXJtaXRlIGEgbGEgYXBwIGZpbmFsIChlai4gZ2dzKSBkZWZpbmlyIGVsIG9yZGVuIHBvciBkZWZlY3RvXHJcbiAqIHBhcmEgbG9zIGF0cmlidXRvcyBkZSBsYSBjaXRhL3NlbGVjY2lvbmFkbyBhbnRlcmlvci5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRPcmRlblBvckRlZmVjdG9BdHJpYnV0b3Mob3JkZW46IHN0cmluZ1tdKSB7XHJcbiAgICBvcmRlblBvckRlZmVjdG9HbG9iYWwgPSBvcmRlbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgY2l0YSB9ID0gcHJvcHMudGVtO1xyXG5cclxuICAgIGlmICghY2l0YSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgbGV0IGNpdGFPYmpldG86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNpdGEgPT09ICdzdHJpbmcnICYmIChjaXRhLnN0YXJ0c1dpdGgoJ3snKSB8fCBjaXRhLnN0YXJ0c1dpdGgoJ1snKSkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNpdGEpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcclxuICAgICAgICAgICAgICAgIGNpdGFPYmpldG8gPSBwYXJzZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIE5vIGVyYSB1biBKU09OIHbDoWxpZG9cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaXRhID09PSAnb2JqZWN0JyAmJiBjaXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgY2l0YU9iamV0byA9IGNpdGE7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNsYXZlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAoY2l0YU9iamV0bykge1xyXG4gICAgICAgIGNvbnN0IHRvZGFzTGFzQ2xhdmVzID0gT2JqZWN0LmtleXMoY2l0YU9iamV0bykuZmlsdGVyKChrKSA9PiBrICE9PSAnb3JkZW4nKTtcclxuXHJcbiAgICAgICAgLy8gUHJpb3JpdHkgMTogJ29yZGVuJyBkZW50cm8gZGVsIEpTT04gaW5kaXZpZHVhbFxyXG4gICAgICAgIC8vIFByaW9yaXR5IDI6ICdvcmRlbicgZ2xvYmFsIGlueWVjdGFkbyBwb3IgbGEgYXBwIGZpbmFsXHJcbiAgICAgICAgLy8gUHJpb3JpdHkgMzogbnVsbCAob3JkZW4gbm8gZGV0ZXJtaW7DrXN0aWNvIC8gdGFsIGNvbW8gdmllbmVuIGxhcyBrZXlzKVxyXG4gICAgICAgIGNvbnN0IG9yZGVuRXNwZWNpZmljbyA9IEFycmF5LmlzQXJyYXkoY2l0YU9iamV0by5vcmRlbikgPyBjaXRhT2JqZXRvLm9yZGVuIDogbnVsbDtcclxuICAgICAgICBjb25zdCBvcmRlbkFwbGljYXIgPSBvcmRlbkVzcGVjaWZpY28gfHwgb3JkZW5Qb3JEZWZlY3RvR2xvYmFsO1xyXG5cclxuICAgICAgICBpZiAob3JkZW5BcGxpY2FyICYmIG9yZGVuQXBsaWNhci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNsYXZlcyA9IHRvZGFzTGFzQ2xhdmVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkeEEgPSBvcmRlbkFwbGljYXIuaW5kZXhPZihhKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkeEIgPSBvcmRlbkFwbGljYXIuaW5kZXhPZihiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NBID0gaWR4QSAhPT0gLTEgPyBpZHhBIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NCID0gaWR4QiAhPT0gLTEgPyBpZHhCIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc0EgLSBwb3NCO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGF2ZXMgPSB0b2Rhc0xhc0NsYXZlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIHtjaXRhT2JqZXRvID8gKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRlbS1jaXRhLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4IDE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXZlcy5tYXAoKGNsYXZlKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtjbGF2ZX0gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXRyaWJ1dG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub21icmU9e2Ake2NsYXZlfTpgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbG9yPXtjaXRhT2JqZXRvIVtjbGF2ZV19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e2NpdGF9IC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30gLz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30gLz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVMb2dvdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5vbkxvZ291dCgpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQXBwQmFyUHJpbmNpcGFsUHJvcHMgPSB7XHJcbiAgICB0aXR1bG8/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBiYXJyYU5hdkZvcm11bGFyaW8/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBtb2RvRE06IE1vZG9ETTtcclxuICAgIHNvbG9MZWN0dXJhPzogYm9vbGVhbjtcclxuICAgIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcEJhclByaW5jaXBhbChwcm9wczogQXBwQmFyUHJpbmNpcGFsUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICB2YXIgY29sb3I6ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ3ByaW1hcnknID0gcHJvcHMuc29sb0xlY3R1cmEgPyAnc2Vjb25kYXJ5JyA6IHByb3BzLm1vZG9ETSA9PT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknO1xyXG4gICAgdmFyIHsgZm9yUGssIHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbW9zdHJhckJvdG9uZXJhTmF2ZWdhY2lvbiA9IHBhbnRhbGxhQWN0dWFsICYmIHBhbnRhbGxhQWN0dWFsICE9PSAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyAmJiAhcHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17Y29sb3J9XHJcbiAgICAgICAgICAgIHN0eWxlPXtwcm9wcy5kaXNhYmxlZCA/IHsgcG9pbnRlckV2ZW50czogJ25vbmUnLCBvcGFjaXR5OiAwLjkgfSA6IHt9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICB7cHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvfVxyXG4gICAgICAgICAgICAgICAge21vc3RyYXJCb3RvbmVyYU5hdmVnYWNpb24gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgPEJvdG9uZXJhTmF2ZWdhY2lvbiBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9Lz4gIFxyXG4gICAgICAgICAgICAgICAgKSA6IG51bGx9IFxyXG4gICAgICAgICAgICAgICAge3Byb3BzLm1vZG9ETSA9PT0gJ2NhcGEnICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW8gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+PHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzVweCcgfX0+IE1PRE8gQ0FQQUNJVEFDScOTTjwvc3Bhbj48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDxVc3VhcmlvTG9ndWVhZG9ZQ29uZmlnIG1vc3RyYXJTZXR1cD17IWZvclBrfSBtb3N0cmFyTG9nb3V0PXshIXBhbnRhbGxhQWN0dWFsICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW99IG9uTG9nb3V0PXtoYW5kbGVMb2dvdXR9IC8+XHJcbiAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxyXG4gICAgICAgIDwvQXBwQmFyPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJvdG9uZXJhTmF2ZWdhY2lvbihwcm9wczogeyBkaXNhYmxlZD86IGJvb2xlYW4gfSk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IHsgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxCdXR0b25Hcm91cCB2YXJpYW50PVwib3V0bGluZWRcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cImluaGVyaXRcIj5cclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdoZHInIH0pKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhbnRhbGxhQWN0dWFsID09PSAnaGRyJyB8fCBwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXtwYW50YWxsYUFjdHVhbCA9PT0gJ2hkcicgPyB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xKScgfSA6IHVuZGVmaW5lZH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPElDT04uQXNzaWdubWVudCAvPiBIb2phIGRlIFJ1dGFcclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnc2luY3Jvbml6YWNpb24nIH0pKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nIHx8IHByb3BzLmRpc2FibGVkfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3BhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nID8geyBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknIH0gOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxJQ09OLkNsb3VkU3luYyAvPiBTaW5jcm9uaXphY2nDs25cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIHtnZXRGb3JtUmVuZGVyZXIoKS5sZWVyQXl1ZGEoKT8udGVtYXMubGVuZ3RoID8gKFxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnYXl1ZGEnIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFudGFsbGFBY3R1YWwgPT09ICdheXVkYScgfHwgcHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3BhbnRhbGxhQWN0dWFsID09PSAnYXl1ZGEnID8geyBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknIH0gOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uSGVscE91dGxpbmUgLz4gQXl1ZGFcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFVzdWFyaW9Mb2d1ZWFkb1lDb25maWcocHJvcHM6IHsgXHJcbiAgICBtb3N0cmFyU2V0dXA/OiBib29sZWFuLFxyXG4gICAgbW9zdHJhckxvZ291dD86IGJvb2xlYW4sXHJcbiAgICBvbkxvZ291dD86ICgpID0+IHZvaWQsIFxyXG4gICAgbmF2aWdhdGlvbk1lbnU/OiBSZWFjdC5SZWFjdE5vZGUgXHJcbn0pOiBKU1guRWxlbWVudCB7XHJcbiAgICB2YXIgdXNlcm5hbWU6IHN0cmluZyB8IG51bGwgPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRVc2VybmFtZUxvZ3VlYWRvKCk7XHJcbiAgICB2YXIgaWRwZXI6IHN0cmluZyB8IG51bGwgPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRJZHBlckxvZ3VlYWRvKCk7XHJcbiAgICB2YXIgeyBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtvcGVuRGlhbG9nLCBzZXRPcGVuRGlhbG9nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICB2YXIgaGFuZGxlTG9nb3V0Q2xpY2sgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgc2V0T3BlbkRpYWxvZyh0cnVlKTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGhhbmRsZUNsb3NlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIHNldE9wZW5EaWFsb2coZmFsc2UpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaGFuZGxlQ29uZmlybUxvZ291dCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICBzZXRPcGVuRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICBpZiAocHJvcHMub25Mb2dvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgcHJvcHMub25Mb2dvdXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBkYXRvcyA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIgdGllbmVFbmN1ZXN0YXM6IGJvb2xlYW4gPSAhIShkYXRvcyAmJiBkYXRvcy5pbmZvcm1hY2lvbkhkciAmJiBPYmplY3Qua2V5cyhkYXRvcy5pbmZvcm1hY2lvbkhkcikubGVuZ3RoID4gMCk7XHJcbiAgICBjb25zdCBtb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcxMHB4JyB9fT5cclxuICAgICAgICAgICAge3Byb3BzLm5hdmlnYXRpb25NZW51fVxyXG4gICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiYm9keTJcIiBzdHlsZT17eyBjb2xvcjogJ2luaGVyaXQnLCBmb250V2VpZ2h0OiAnYm9sZCcsIG1hcmdpbkxlZnQ6JzVweCcgfX0+XHJcbiAgICAgICAgICAgICAgICB7aWRwZXJ9IC0ge3VzZXJuYW1lfVxyXG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIHtwcm9wcy5tb3N0cmFyU2V0dXAgPyAoXHJcbiAgICAgICAgICAgICAgICA8RmFzdFNldHVwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ21vZG8nIH0pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb24+e21vZG9ETSA9PT0gJ2NhcGEnID8gPElDT04uQnVzaW5lc3NDZW50ZXIgLz4gOiA8SUNPTi5TcG9ydHNFc3BvcnRzIC8+fSA8L0xpc3RJdGVtSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5DYW1iaW8gYSBtb2RvIHttb2RvRE0gPT09ICdjYXBhJyA/ICdQcm9kdWNjacOzbicgOiAnQ2FwYWNpdGFjacOzbid9PC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5Tb3BvcnRlIHTDqWNuaWNvPC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVTRVRfT1BDSU9ORVMoe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb24+PElDT04uUmVmcmVzaC8+PC9MaXN0SXRlbUljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHQ+UmVzZXQgb3BjaW9uZXM8L0xpc3RJdGVtVGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9Ly4uL21lbnUjaT1zaW5jcm9uaXphcmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19ICBcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb24+PElDT04uU3luY0FsdCAvPjwvTGlzdEl0ZW1JY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0PlNpbmNyb25pemFjacOzbiAobGluayB2aWVqbyk8L0xpc3RJdGVtVGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICAgICAgPC9GYXN0U2V0dXA+XHJcbiAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICB7cHJvcHMubW9zdHJhckxvZ291dCA/IChcclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJpbmhlcml0XCIgb25DbGljaz17aGFuZGxlTG9nb3V0Q2xpY2t9IHN0eWxlPXt7IG1pbldpZHRoOiAnYXV0bycsIHBhZGRpbmc6ICc2cHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICkgOiBudWxsfVxyXG5cclxuICAgICAgICAgICAgPERpYWxvZyBvcGVuPXtvcGVuRGlhbG9nfSBvbkNsb3NlPXtoYW5kbGVDbG9zZX0+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+Q2VycmFyIFNlc2nDs248L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGllbmVFbmN1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJIYXkgZW5jdWVzdGFzIGNhcmdhZGFzIGVuIGVsIGRpc3Bvc2l0aXZvLiBTaSBzYWxlIGRlIGxhIGFwbGljYWNpw7NuIHNpbiBzaW5jcm9uaXphciBwb2Ryw61hIHBlcmRlciBlbCB0cmFiYWpvIHJlYWxpemFkby5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIsK/RXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBzYWxpcj8gUGFyYSB2b2x2ZXIgYSBpbmdyZXNhciBkZWJlcsOhIGluaWNpYXIgc2VzacOzbiBudWV2YW1lbnRlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAge3RpZW5lRW5jdWVzdGFzID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtTG9nb3V0fSBjb2xvcj1cInNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbGlyIGRlIHRvZG9zIG1vZG9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xvc2V9IGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250aW51YXIgcmVsZXZhbmRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xvc2V9IGNvbG9yPVwiaW5oZXJpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ29uZmlybUxvZ291dH0gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbGlyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExheW91dEFjY2lvbkRpc3Bvc2l0aXZvUHJvcHMge1xyXG4gICAgdGl0dWxvQXBwQmFyOiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICB0aXR1bG9QYW5lbDogc3RyaW5nO1xyXG4gICAgaGVhZGVyQWRpY2lvbmFsPzogUmVhY3QuUmVhY3ROb2RlO1xyXG5cclxuICAgIG1vZG9ETTogTW9kb0RNO1xyXG4gICAgb25saW5lOiBib29sZWFuO1xyXG5cclxuICAgIGxvYWRpbmc/OiBib29sZWFuO1xyXG4gICAgYXZpc28/OiB7IHRpcG86ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicsIG1lbnNhamU6IHN0cmluZyB9IHwgbnVsbDtcclxuXHJcbiAgICB0ZXh0b0JvdG9uQWNjaW9uOiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBjb2xvckJvdG9uQWNjaW9uPzogQ29sb3JWYWx1ZXM7XHJcbiAgICBvbkFjY2lvbjogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBkZXNoYWJpbGl0YXJCb3RvblZvbHZlcj86IGJvb2xlYW47XHJcbiAgICBtZW5zYWplVmFjaW8/OiBzdHJpbmc7XHJcblxyXG4gICAgY2hpbGRyZW5Nb2RhbGVzPzogUmVhY3QuUmVhY3ROb2RlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0QWNjaW9uRGlzcG9zaXRpdm8ocHJvcHM6IExheW91dEFjY2lvbkRpc3Bvc2l0aXZvUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCBkYXRvc0J5UGFzcyA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBzY3JvbGxUb1RvcCgpO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIGNvbnN0IGF2aXNvUmVkdXggPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuYXZpc29QZXJzaXN0ZW50ZSk7XHJcbiAgICBjb25zdCBhdmlzb0FNb3N0cmFyID0gcHJvcHMuYXZpc28gfHwgYXZpc29SZWR1eDtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGF2aXNvUmVkdXgpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdhdmlzb1BlcnNpc3RlbnRlJywgdmFsb3I6IG51bGwgfSkpO1xyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgfSwgW2F2aXNvUmVkdXgsIGRpc3BhdGNoXSk7XHJcblxyXG4gICAgY29uc3QgY2FudENhcmdhczogbnVtYmVyID0gaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpID8gbGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykuYXJyYXkoKS5sZW5ndGggOiAwO1xyXG4gICAgY29uc3QgY2FudFJlc3B1ZXN0YXM6IG51bWJlciA9IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKSAmJiBlc3RydWN0dXJhID8gbGlrZUFyKGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdKS5hcnJheSgpLmxlbmd0aCA6IDA7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICBtb2RvRE09e3Byb3BzLm1vZG9ETX1cclxuICAgICAgICAgICAgICAgIHRpdHVsbz17cHJvcHMudGl0dWxvQXBwQmFyfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmxvYWRpbmd9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8SW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlLz5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17eyBwYWRkaW5nOiAnMjBweCcsIG1hcmdpbjogJ2F1dG8nLCBtYXJnaW5Cb3R0b206ICcxMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDVcIj57cHJvcHMudGl0dWxvUGFuZWx9PC9UeXBvZ3JhcGh5PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaGVhZGVyQWRpY2lvbmFsfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB7aGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzIwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCI+SW5mb3JtYWNpw7NuIGRlbCBkaXNwb3NpdGl2bzo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57Y2FudENhcmdhc30gw6FyZWFzOiB7bGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e2NhbnRSZXNwdWVzdGFzfSB7ZXN0cnVjdHVyYT8udWFQcGFsIHx8ICd2aXZpZW5kYXMnfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMubWVuc2FqZVZhY2lvICYmIHByb3BzLm1lbnNhamVWYWNpby50cmltKCkgIT09IFwiXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcyMHB4JyB9fT57cHJvcHMubWVuc2FqZVZhY2lvfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB7YXZpc29BTW9zdHJhciAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMjBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ3N1Y2Nlc3MnID8gJyNlNmZmZmEnIDogYXZpc29BTW9zdHJhci50aXBvID09PSAnZXJyb3InID8gJyNmZmY1ZjUnIDogJyNlZGYyZjcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ3N1Y2Nlc3MnID8gJyMyMzRlNTInIDogYXZpc29BTW9zdHJhci50aXBvID09PSAnZXJyb3InID8gJyM5YjJjMmMnIDogJyMyZDM3NDgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7YXZpc29BTW9zdHJhci50aXBvID09PSAnc3VjY2VzcycgPyAnIzMxOTc5NScgOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdlcnJvcicgPyAnI2U1M2UzZScgOiAnI2NiZDVlMCd9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pnthdmlzb0FNb3N0cmFyLm1lbnNhamV9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMHB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yQm90b25BY2Npb24gfHwgJ3ByaW1hcnknfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmxvYWRpbmcgfHwgIXByb3BzLm9ubGluZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uQWNjaW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMudGV4dG9Cb3RvbkFjY2lvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEwcHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgeyFwcm9wcy5vbmxpbmUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29sb3I9XCJzZWNvbmRhcnlcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiBwcm9wcy5kZXNoYWJpbGl0YXJCb3RvblZvbHZlciA/ICcwcHgnIDogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYmUgZXN0YXIgY29uZWN0YWRvIGEgaW50ZXJuZXQgcGFyYSByZWFsaXphciBlc3RhIGFjY2nDs24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbk1vZGFsZXN9XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGFudGFsbGFTaW5jcm9uaXphY2lvblByb3BzIHtcclxuICAgIC8vIFByb3BzIG9wY2lvbmFsZXMgcGFyYSBlbCBcInNhYm9yXCIgcmVxdWVyaWRhXHJcbiAgICByZXF1ZXJpZGE/OiBib29sZWFuO1xyXG4gICAgbWVuc2FqZVJlcXVlcmlkbz86IFJlYWN0LlJlYWN0Tm9kZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhU2luY3Jvbml6YWNpb24ocHJvcHM6IFBhbnRhbGxhU2luY3Jvbml6YWNpb25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGNvbnN0IGF2aXNvUGVyc2lzdGVudGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuYXZpc29QZXJzaXN0ZW50ZSk7XHJcbiAgICBjb25zdCBvbmxpbmU6IGJvb2xlYW4gPSB1c2VPbmxpbmVTdGF0dXMoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IG1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVNpbmNyb25pemFyID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2F2aXNvUGVyc2lzdGVudGUnLCB2YWxvcjogbnVsbCB9KSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRvcyA9IGF3YWl0IGZvcm1SZW5kZXJlci5vblNpbmNyb25pemFyKGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBhd2FpdCBmb3JtUmVuZGVyZXIuY2FyZ2FyTW90b3IoKTtcclxuICAgICAgICAgICAgY29uc3QgbWVuc2FqZUV4aXRvID0gYFNpbmNyb25pemFjacOzbiBleGl0b3NhLiBTaW5jcm8gTsK6ICR7ZGF0b3MubnVtX3NpbmNyb31gO1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfUEFOVEFMTEFfQUNUVUFMKHsgcGFudGFsbGE6ICdzaW5jcm9uaXphY2lvbicsIGF2aXNvUGVyc2lzdGVudGU6IHsgdGlwbzogJ3N1Y2Nlc3MnLCBtZW5zYWplOiBtZW5zYWplRXhpdG8gfSB9KSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX1BBTlRBTExBX0FDVFVBTCh7XHJcbiAgICAgICAgICAgICAgICBwYW50YWxsYTogcHJvcHMucmVxdWVyaWRhID8gJ3NpbmNyb25pemFjaW9uX3JlcXVlcmlkYScgOiAnc2luY3Jvbml6YWNpb24nLFxyXG4gICAgICAgICAgICAgICAgYXZpc29QZXJzaXN0ZW50ZTogeyB0aXBvOiAnZXJyb3InLCBtZW5zYWplOiBgRXJyb3IgZGUgc2luY3Jvbml6YWNpw7NuOiAke3VuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWAgfVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBFc3RpbG8gcGFyYSBlbCBtZW5zYWplIGN1YW5kbyBlcyByZXF1ZXJpZGFcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcyA9IHsgZm9udFNpemU6IFwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6IDYwMCwgcGFkZGluZzogXCI1cHggMTBweFwiLCBtYXJnaW5Cb3R0b206IFwiMTVweFwiIH07XHJcblxyXG4gICAgLy8gU2kgZXMgcmVxdWVyaWRhLCBpbnllY3RhbW9zIGVsIG1lbnNhamUgZXhwbGljYXRpdm8gYXJyaWJhXHJcbiAgICBjb25zdCBoZWFkZXJBZGljaW9uYWwgPSBwcm9wcy5yZXF1ZXJpZGEgJiYgcHJvcHMubWVuc2FqZVJlcXVlcmlkbyA/IChcclxuICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJkaXZcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAge3Byb3BzLm1lbnNhamVSZXF1ZXJpZG99XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8TGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgdGl0dWxvQXBwQmFyPXtwcm9wcy5yZXF1ZXJpZGEgPyBgU0lOQ1JPTklaQUNJw5NOIFJFUVVFUklEQSR7bW9kb0RNID09PSAnY2FwYScgPyAnIC0gQ0FQQScgOiAnJ31gIDogJ1NJTkNST05JWkFDScOTTid9XHJcbiAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICB0aXR1bG9QYW5lbD17cHJvcHMucmVxdWVyaWRhID8gXCJTaW5jcm9uaXphY2nDs24gUmVxdWVyaWRhXCIgOiBcIlNpbmNyb25pemFyIERpc3Bvc2l0aXZvXCJ9XHJcbiAgICAgICAgICAgIGhlYWRlckFkaWNpb25hbD17aGVhZGVyQWRpY2lvbmFsfVxyXG4gICAgICAgICAgICBhdmlzbz17YXZpc29QZXJzaXN0ZW50ZX1cclxuICAgICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgICAgb25saW5lPXtvbmxpbmV9XHJcbiAgICAgICAgICAgIHRleHRvQm90b25BY2Npb249e1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyA/IFxyXG4gICAgICAgICAgICAgICAgICAgICdTaW5jcm9uaXphbmRvLi4uJ1xyXG4gICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+PElDT04uQ2xvdWRTeW5jIC8+IFNpbmNyb25pemFyPC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbG9yQm90b25BY2Npb249e21vZG9ETSA9PT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknfVxyXG4gICAgICAgICAgICBvbkFjY2lvbj17aGFuZGxlU2luY3Jvbml6YXJ9XHJcbiAgICAgICAgICAgIG1lbnNhamVWYWNpbz17cHJvcHMucmVxdWVyaWRhID8gXCIgXCIgOiBcIk5vIGhheSBpbmZvcm1hY2nDs24gZGUgZm9ybXVsYXJpb3MgbG9jYWxtZW50ZS5cIn1cclxuICAgICAgICAvPlxyXG4gICAgKTtcclxufVxyXG5cclxuLy8gYXl1ZGEgZW4gbMOtbmVhIGd1YXJkYWRhIGVuIGxhIMO6bHRpbWEgc2luY3Jvbml6YWNpw7NuOiBmdW5jaW9uYSBzaW4gY29uZXhpw7NuICh2ZXIgZG9jcy9heXVkYS1vbmxpbmUubWQpXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUF5dWRhKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICBjb25zdCB0ZW1hczogQXl1ZGFUZW1hUGFyYVVzdWFyaW9bXSA9IGdldEZvcm1SZW5kZXJlcigpLmxlZXJBeXVkYSgpPy50ZW1hcyA/PyBbXTtcclxuICAgIGNvbnN0IFtpZFRlbWEsIHNldElkVGVtYV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPih0ZW1hcy5sZW5ndGggPyB0ZW1hc1swXS5pZCA6IG51bGwpO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBzY3JvbGxUb1RvcCgpO1xyXG4gICAgfSwgW2lkVGVtYV0pO1xyXG4gICAgY29uc3QgdGVtYSA9IHRlbWFzLmZpbmQodGVtYSA9PiB0ZW1hLmlkID09IGlkVGVtYSk7XHJcbiAgICAvLyBsb3MgZW5sYWNlcyBcImF5dWRhOmlkXCIgbGxldmFuIGEgb3RybyB0ZW1hOyBsb3MgZGVtw6FzIHNlIGFicmVuIGFwYXJ0ZSBwYXJhIG5vIHNhbGlyIGRlIGxhIGFwbGljYWNpw7NuXHJcbiAgICBjb25zdCBvbkNsaWNrQ29udGVuaWRvID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVubGFjZSA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgPyBldmVudC50YXJnZXQuY2xvc2VzdCgnYScpIDogbnVsbDtcclxuICAgICAgICBjb25zdCBkZXN0aW5vID0gZW5sYWNlPy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcclxuICAgICAgICBpZiAoZGVzdGlubyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmIChkZXN0aW5vLnN0YXJ0c1dpdGgoJ2F5dWRhOicpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRJZFRlbWEoZGVzdGluby5zbGljZSgnYXl1ZGE6Jy5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGRlc3Rpbm8sICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgdGl0dWxvPVwiQVlVREFcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7IHBhZGRpbmc6ICcyMHB4JywgbWFyZ2luOiAnYXV0bycsIG1hcmdpbkJvdHRvbTogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0ZW1hcy5sZW5ndGggPT0gMCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+TGEgYXl1ZGEgc2UgZGVzY2FyZ2EgYWwgc2luY3Jvbml6YXIgZWwgZGlzcG9zaXRpdm8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnOHB4JywgbWFyZ2luQm90dG9tOiAnMTZweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RlbWFzLm1hcCh0ZW1hID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXt0ZW1hLmlkfSBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD17dGVtYS5pZCA9PSBpZFRlbWEgPyAnY29udGFpbmVkJyA6ICdvdXRsaW5lZCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJZFRlbWEodGVtYS5pZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57dGVtYS50aXR1bG99PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RlbWEgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg1XCI+e3RlbWEudGl0dWxvfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIGh0bWwgZ2VuZXJhZG8gZW4gZWwgc2Vydmlkb3IgYSBwYXJ0aXIgZGVsIG1hcmtkb3duIGRlIGxhIGF5dWRhIChzaW4gaHRtbCBjcnVkbykgKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXl1ZGEtY29udGVuaWRvXCIgb25DbGljaz17b25DbGlja0NvbnRlbmlkb30gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiB0ZW1hLmh0bWwgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFDYW1iaW9Nb2RvKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGNvbnN0IFthdmlzbywgc2V0QXZpc29dID0gdXNlU3RhdGU8eyB0aXBvOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnZXJyb3InLCBtZW5zYWplOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xyXG4gICAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuICAgIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGNvbnN0IFttb2RvRE0sIHNldE1vZG9ETV0gPSB1c2VTdGF0ZTxNb2RvRE0+KCdwcm9kdWMnKTtcclxuICAgIGNvbnN0IFtlcnJvclBhc3N3b3JkLCBzZXRFcnJvclBhc3N3b3JkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgY29uc3Qgb25saW5lOiBib29sZWFuID0gdXNlT25saW5lU3RhdHVzKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmZXRjaE1vZG8gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgICAgICAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRNb2RvRE0obSk7XHJcbiAgICAgICAgICAgIHNldE1vZG9ETShtKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZldGNoTW9kbygpO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNvbmZpcm1hckNhbWJpbyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICBpZiAocGFzc3dvcmQgIT09ICcxMjM0Jykge1xyXG4gICAgICAgICAgICBzZXRFcnJvclBhc3N3b3JkKCdDb250cmFzZcOxYSBpbmNvcnJlY3RhLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEVycm9yUGFzc3dvcmQobnVsbCk7XHJcbiAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICBzZXRBdmlzbyhudWxsKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBudWV2b01vZG86IE1vZG9ETSA9IG1vZG9ETSA9PT0gJ3Byb2R1YycgPyAnY2FwYScgOiAncHJvZHVjJztcclxuICAgICAgICAgICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5vblNpbmNyb25pemFyKGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGZvcm1SZW5kZXJlci5zZXRNb2RvRE0obnVldm9Nb2RvKTtcclxuICAgICAgICAgICAgc2V0TW9kb0RNKG51ZXZvTW9kbyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5jYXJnYXJNb3RvcigpO1xyXG4gICAgICAgICAgICBzZXRBdmlzbyh7IHRpcG86ICdzdWNjZXNzJywgbWVuc2FqZTogYE1PRE8gJHtudWV2b01vZG8udG9VcHBlckNhc2UoKX0gQUNUSVZBRE8gWSBESVNQT1NJVElWTyBTSU5DUk9OSVpBRE9gIH0pO1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ21vZG8nIH0pKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgc2V0QXZpc28oeyB0aXBvOiAnZXJyb3InLCBtZW5zYWplOiBgRXJyb3IgYWwgY2FtYmlhciBkZSBtb2RvOiAke3VuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWAgfSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldFBhc3N3b3JkKCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlckFkaWNpb25hbFRleHQgPSAoXHJcbiAgICAgICAgPFR5cG9ncmFwaHkgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMjBweCcsIGZvbnRXZWlnaHQ6ICdib2xkJyB9fT5cclxuICAgICAgICAgICAgTW9kbyBhY3R1YWw6IDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBtb2RvRE0gPT09ICdjYXBhJyA/ICdncmVlbicgOiAnYmx1ZScsIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnIH19Pnttb2RvRE19PC9zcGFuPlxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8TGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgdGl0dWxvQXBwQmFyPVwiQ0FNQklPIERFIE1PRE9cIlxyXG4gICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgdGl0dWxvUGFuZWw9XCJDYW1iaWFyIE1vZG8gZGVsIERpc3Bvc2l0aXZvXCJcclxuICAgICAgICAgICAgaGVhZGVyQWRpY2lvbmFsPXtoZWFkZXJBZGljaW9uYWxUZXh0fVxyXG4gICAgICAgICAgICBhdmlzbz17YXZpc299XHJcbiAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICAgIG9ubGluZT17b25saW5lfVxyXG4gICAgICAgICAgICB0ZXh0b0JvdG9uQWNjaW9uPXtgQ2FtYmlhciBhIG1vZG8gJHttb2RvRE0gPT09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9YH1cclxuICAgICAgICAgICAgY29sb3JCb3RvbkFjY2lvbj17bW9kb0RNID09PSAncHJvZHVjJyA/ICdwcmltYXJ5JyA6ICdzdWNjZXNzJ31cclxuICAgICAgICAgICAgb25BY2Npb249eygpID0+IHsgc2V0RXJyb3JQYXNzd29yZChudWxsKTsgc2V0RGlhbG9nT3Blbih0cnVlKTsgfX1cclxuICAgICAgICAgICAgY2hpbGRyZW5Nb2RhbGVzPXtcclxuICAgICAgICAgICAgICAgIDxEaWFsb2cgb3Blbj17ZGlhbG9nT3Blbn0gb25DbG9zZT17KCkgPT4geyBzZXREaWFsb2dPcGVuKGZhbHNlKTsgc2V0UGFzc3dvcmQoJycpOyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+Q29uZmlybWFyIGNhbWJpbyBkZSBtb2RvPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzE1cHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybWEgY2FtYmlvIGRlIG1vZG8gXCJ7bW9kb0RNfVwiIGEgXCJ7bW9kb0RNID09PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnfVwiLiBTZSBzaW5jcm9uaXphcsOhIGVsIGRpc3Bvc2l0aXZvLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JQYXNzd29yZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBzdHlsZT17eyBjb2xvcjogJyNkMzJmMmYnLCBtYXJnaW5Cb3R0b206ICcxNXB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvclBhc3N3b3JkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiYm9keTJcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JyB9fT5Qb3IgZmF2b3IgaW5ncmVzZSBsYSBjb250cmFzZcOxYTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwYXNzd29yZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYXNzd29yZChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yUGFzc3dvcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JQYXNzd29yZChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgcGFkZGluZzogJzEwcHgnLCBmb250U2l6ZTogJzE2cHgnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHsgc2V0RGlhbG9nT3BlbihmYWxzZSk7IHNldFBhc3N3b3JkKCcnKTsgc2V0RXJyb3JQYXNzd29yZChudWxsKTsgfX0gY29sb3I9XCJpbmhlcml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtYXJDYW1iaW99IGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpcm1hclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlUHJvcHMge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlKF9wcm9wczogSW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCB2ZXJzaW9uID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0QXBwQ2FjaGVWZXJzaW9uKCk7XHJcbiAgICBjb25zdCB7IG51bV9zaW5jcm8gfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxQYXBlciBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2Pkluc3RpdHV0byBkZSBFc3RhZMOtc3RpY2EgeSBDZW5zb3MgZGUgbGEgQ2l1ZGFkIEF1dMOzbm9tYSBkZSBCdWVub3MgQWlyZXMgLSBJREVDQkE8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+dmVyc2nDs24ge3ZlcnNpb259IC0ge251bV9zaW5jcm8gPyBgc2luY3JvOiAke251bV9zaW5jcm8udG9TdHJpbmcoKX1gIDogJ3NpbiBzaW5jcm9uaXphcid9PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvUGFwZXI+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzID0ge1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSG9qYURlUnV0YURlc3BsaWVndWVUeXBlID0gKHByb3BzOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzKSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgSG9qYURlUnV0YURlc3BsaWVndWU6IEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEhvamFEZVJ1dGFEZXNwbGllZ3VlID0gKGhvamFEZVJ1dGE6IEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZSkgPT4gSG9qYURlUnV0YURlc3BsaWVndWUgPSBob2phRGVSdXRhXHJcblxyXG5zZXRIb2phRGVSdXRhRGVzcGxpZWd1ZSgoX3Byb3BzOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVByb3BzKSA9PiB7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICB2YXIgeyBjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgdGl0dWxvPVwiSE9KQSBERSBSVVRBXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUvPlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihjYXJnYXMpLm1hcCgoY2FyZ2EsIGlkQ2FyZ2EsIF8sIHBvc2ljaW9uKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDYXJnYSBrZXk9e2lkQ2FyZ2F9IGNhcmdhPXtjYXJnYX0gaWRDYXJnYT17aWRDYXJnYX0gcG9zaWNpb249e3Bvc2ljaW9ufSBpbmZvcm1hY2lvbkhkcj17aW5mb3JtYWNpb25IZHJ9IGZlZWRiYWNrUm93VmFsaWRhdG9yPXtmZWVkYmFja1Jvd1ZhbGlkYXRvcn0gcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30gLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMaXN0YVRleHRvcyhwcm9wczogeyB0ZXh0b3M6IHN0cmluZ1tdIH0pIHtcclxuICAgIHJldHVybiA8dWw+XHJcbiAgICAgICAge3Byb3BzLnRleHRvcy5tYXAodCA9PiA8bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOiB7IFt4OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnMgPSB7XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDogJ2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6ICcnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPcGVuZWRUYWJzKCkge1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHsgbW9kb0RpcmVjdG8gfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBtb2RvRGlyZWN0bzogc3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG8gfSkpO1xyXG4gICAgY29uc3QgdXBkYXRlVGFic1N0YXR1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgIH0sIFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvID8gbnVsbCA6ICh0YWJzKSA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlciB0YWItZXJyb3JcIj7CoUFURU5DScOTTiEgSGF5IG3DoXMgZGUgdW5hIHZlbnRhbmEgYWJpZXJ0YS4gU2UgcHVlZGVuIHBlcmRlciBkYXRvczoge3RhYnN9PC9kaXY+XHJcbiAgICAgICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpIHtcclxuICAgIHZhciB7IGZvclBrLCBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIHZhciBkYXRvc0J5UGFzcyA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5hciBzaSBsYSBzaW5jcm9uaXphY2nDs24gZXMgcmVxdWVyaWRhXHJcbiAgICBjb25zdCBzaW5jcm9SZXF1ZXJpZGEgPSAhaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpXHJcbiAgICAgICAgfHwgKGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKSAmJiBkYXRvc0J5UGFzcy5pZHBlciAhPT0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0SWRwZXJMb2d1ZWFkbygpKTtcclxuXHJcbiAgICAvLyBTaSBsYSBzaW5jcm8gZXMgcmVxdWVyaWRhLCBmb3J6YXIgcGFudGFsbGFBY3R1YWwgdsOtYSBSZWR1eFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoc2luY3JvUmVxdWVyaWRhICYmIHBhbnRhbGxhQWN0dWFsICE9PSAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJykge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ3NpbmNyb25pemFjaW9uX3JlcXVlcmlkYScgfSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtzaW5jcm9SZXF1ZXJpZGEsIHBhbnRhbGxhQWN0dWFsLCBkaXNwYXRjaF0pO1xyXG5cclxuICAgIGlmIChzaW5jcm9SZXF1ZXJpZGEpIHtcclxuICAgICAgICBjb25zdCBtZW5zYWplID0gIWhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKVxyXG4gICAgICAgICAgICA/IDw+IERlYmUgc2luY3Jvbml6YXIgZWwgZGlzcG9zaXRpdm8gcGFyYSBvYnRlbmVyIHVuYSBob2phIGRlIHJ1dGEuPC8+XHJcbiAgICAgICAgICAgIDogPD4gRWwgdXN1YXJpbyBhdXRlbnRpY2FkbyBubyBjb2luY2lkZSBjb24gZWwgdXN1YXJpbyBhc29jaWFkbyBhbFxyXG4gICAgICAgICAgICAgICAgdHJhYmFqbyBhbG1hY2VuYWRvIGVuIGxhIHRhYmxldC5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgRGViZSBzaW5jcm9uaXphciBhbnRlcyBkZSBjb250aW51YXIuXHJcbiAgICAgICAgICAgIDwvPjtcclxuICAgICAgICByZXR1cm4gPFBhbnRhbGxhU2luY3Jvbml6YWNpb24gcmVxdWVyaWRhPXt0cnVlfSBtZW5zYWplUmVxdWVyaWRvPXttZW5zYWplfSAvPjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9yUGsgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gPFBhbnRhbGxhU2luY3Jvbml6YWNpb24gLz5cclxuICAgICAgICB9IGVsc2UgaWYgKHBhbnRhbGxhQWN0dWFsID09PSAnbW9kbycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxQYW50YWxsYUNhbWJpb01vZG8gLz5cclxuICAgICAgICB9IGVsc2UgaWYgKHBhbnRhbGxhQWN0dWFsID09PSAnYXl1ZGEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8UGFudGFsbGFBeXVkYSAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA8Rm9ybXVsYXJpb0Rlc3BsaWVndWUgZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbChcclxuICAgIGZvcm1SZW5kZXJlcjogRm9ybVJlbmRlcmVyLFxyXG4gICAgb3B0czogeyBmb3JQa1JhaXo/OiBGb3JQa1JhaXogfSA9IHt9XHJcbikge1xyXG4gICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICBjb25zdCBzdG9yZSA9IGF3YWl0IGNyZWFyU3RvcmVGb3JtdWxhcmlvKG9wdHMpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhyb3cgKGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXogPyBcIlZvbHZlciBhbCBmb3JtdWxhcmlvXCIgOiBcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMgLz5cclxuICAgICAgICAgICAgPEFwcERtRW5jdSAvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOiBMaWJyZURlc3BsaWVndWVUeXBlKSA9PiBMaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiA8ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHR5cGUgQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgIH1cclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGF1dG9DYXJnYXJQZXJzb25hcyA9IChjb25maWdQYWRyZTogQ29uZmlnUGFkcmUsIHVhUGFkcmVQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSkgPT4ge1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTogUmVzcHVlc3RhcywgY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gfHwgZW1wdHkocmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHx8IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdWzBdW2NvbmZpZ1BhZHJlLnZhclNleG9QZXJzb25hXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvc05vbWJyZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6IHN0cmluZykgPT4gbm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YVBhZHJlUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpIHtcclxuICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNSYWl6LCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10gPz8gW10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsIGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjogUGFydGlhbDx7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogQ29uZmlnUGFkcmVcclxuICAgIH0+O1xyXG4gICAgdmFyIGNvbmZpZ0VuY3U6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hcycsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJsb3Nfbm9tYnJlc1wiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcbiAgICB2YXIgY29uZmlnU3VwZTogQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgdWFzSXRlcmFyID0ge1xyXG4gICAgICAgICAgICBob2dhcmVzOiBjb25maWdFbmN1LFxyXG4gICAgICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLCB1YVBhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdQYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCB1YVBhZHJlIGFzIElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsIGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsICd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXNwdWVzdGFzUmFpei52ZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgLy9sZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgLy9yZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSCA/ICdvaycgOiBudWxsO1xyXG4gICAgLy9sZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwID8gJ29rJyA6IG51bGw7XHJcbn0pXHJcblxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJDb21vZGluZXMoZm9yUGs6IEZvclBrKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGdldFN0b3JlRm9ybXVsYXJpbygpO1xyXG4gICAgaWYgKCFzdG9yZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFjdHVhbCA9IChzdG9yZS5nZXRTdGF0ZSgpIGFzIENhc29TdGF0ZSk/Lm9wY2lvbmVzPy5jb21vZGluZXMgfHwgY29tb2RpbmVzSW5pY2lhbGVzO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGluZm9IZHIgPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dO1xyXG4gICAgY29uc3Qgc2VtYW5hTnVtZXJvID0gaW5mb0hkcj8udGVtPy5zZW1hbmE7XHJcbiAgICBjb25zdCBzZW1hbmFPYmogPSBzZW1hbmFOdW1lcm8gIT0gbnVsbCA/IGVzdHJ1Y3R1cmEuc2VtYW5hcz8uW3NlbWFuYU51bWVybyBhcyBJZFNlbWFuYV0gOiBudWxsO1xyXG5cclxuICAgIC8vIFJlc3B1ZXN0YXMgYmFzZSBhIHBhcnRpciBkZWwgZm9yUGsgcmVjaWJpZG9cclxuICAgIGNvbnN0IHsgcmVzcHVlc3Rhc1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcblxyXG4gICAgLy8gMS4gSWRlbnRpZmljYW1vcyBlbCBjb250ZW5lZG9yIGRlIHBlcnNvbmFzIHNlZ8O6biAnY29uUmVhSG9nYXInXHJcbiAgICBsZXQgY29udGVuZWRvclBlcnNvbmFzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBjb25zdCB2YXJOYW1lUmVhbGl6YWRhID0gZXN0cnVjdHVyYS5jb25SZWFIb2dhciA/ICdlbnRyZWEnIDogJ2VudHJlYXYnO1xyXG5cclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgY29uc3QgcGtIb2dhciA9IChlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzPy5ob2dhcmVzPy5wa19hZ3JlZ2FkYSBhcyBrZXlvZiBGb3JQaykgfHwgJ2hvZ2FyJztcclxuICAgICAgICBjb25zdCBudW1Ib2dhckFjdHVhbCA9IGZvclBrW3BrSG9nYXJdIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKG51bUhvZ2FyQWN0dWFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgaWR4SG9nYXIgPSBudW1Ib2dhckFjdHVhbCAtIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvZ2FyZXNBcnJheSA9IHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSBhcyBhbnlbXTtcclxuICAgICAgICAgICAgY29udGVuZWRvclBlcnNvbmFzID0gQXJyYXkuaXNBcnJheShob2dhcmVzQXJyYXkpID8gaG9nYXJlc0FycmF5W2lkeEhvZ2FyXSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZW5lZG9yUGVyc29uYXMgPSByZXNwdWVzdGFzUmFpejtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21vZGluZXNDYWxjdWxhZG9zOiBSZWNvcmQ8SWRDb21vZGluLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLmNvbW9kaW5lc0luaWNpYWxlcyxcclxuICAgICAgICAuLi5hY3R1YWwsXHJcbiAgICAgICAgLi4ue1xyXG4gICAgICAgICAgICByZXNwczE6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICBwYXJlbnRzMTogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgIHJlc3BpMTogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgIHBhcmVudGkxOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICAgICAgbmplZmU6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiBFdmFsdWFtb3MgY29tb2RpbmVzIGRlIGxhIGVudHJldmlzdGEgcmVhbGl6YWRhICgnZW50cmVhJyBvICdlbnRyZWF2JylcclxuICAgIGlmIChjb250ZW5lZG9yUGVyc29uYXMgJiYgdmFyTmFtZVJlYWxpemFkYSBpbiBjb250ZW5lZG9yUGVyc29uYXMpIHtcclxuICAgICAgICBpZiAoY29udGVuZWRvclBlcnNvbmFzW3Zhck5hbWVSZWFsaXphZGFdID09IDEpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9tYnJlciA9IGNvbnRlbmVkb3JQZXJzb25hc1snbm9tYnJlciddO1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25kID0gY29udGVuZWRvclBlcnNvbmFzWydyZXNwb25kJ107XHJcbiAgICAgICAgICAgIGNvbnN0IGNyTnVtTWllbWJybyA9IGNvbnRlbmVkb3JQZXJzb25hc1snY3JfbnVtX21pZW1icm8nXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBlcnNvbmFzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRlbmVkb3JQZXJzb25hc1sncGVyc29uYXMnXSlcclxuICAgICAgICAgICAgICAgID8gKGNvbnRlbmVkb3JQZXJzb25hc1sncGVyc29uYXMnXSBhcyBhbnlbXSlcclxuICAgICAgICAgICAgICAgIDogW107XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidXNjYXJQZXJzb25hID0gKG51bT86IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIG51bSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwZXJzb25hc0FycmF5LmZpbmQoKHA6IGFueSwgaWR4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHA/LnBlcnNvbmEgIT0gbnVsbCA/IE51bWJlcihwLnBlcnNvbmEpID09PSBOdW1iZXIobnVtKSA6IChpZHggKyAxKSA9PT0gTnVtYmVyKG51bSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGV4dG9QYXJlbnRlc2NvID0gKHA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcDQgPSBwPy5wNCA/PyBwPy5wNHI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcDQgIT0gbnVsbCA/IG9idGVuZXJUZXh0b1BhcmVudGVzY28oTnVtYmVyKHA0KSwgZXN0cnVjdHVyYS5vcGVyYXRpdm8pIDogbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBlcnNvbmFSZXNwID0gYnVzY2FyUGVyc29uYShyZXNwb25kKTtcclxuICAgICAgICAgICAgY29uc3QgcGVyc29uYVJlc3BpID0gYnVzY2FyUGVyc29uYShjck51bU1pZW1icm8pO1xyXG4gICAgICAgICAgICBjb25zdCBqZWZlID0gYnVzY2FyUGVyc29uYSgxKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50UmVzcCA9IHRleHRvUGFyZW50ZXNjbyhwZXJzb25hUmVzcCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlc3BpID0gdGV4dG9QYXJlbnRlc2NvKHBlcnNvbmFSZXNwaSk7XHJcblxyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbW9kaW5lc0NhbGN1bGFkb3MsIHtcclxuICAgICAgICAgICAgICAgIHJlc3BzMTogbm9tYnJlciA/IFN0cmluZyhub21icmVyKSA6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50czE6IHBhcmVudFJlc3AgPyBwYXJlbnRSZXNwIDogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgICAgICByZXNwaTE6IHBlcnNvbmFSZXNwaT8ubm9tYnJlID8gU3RyaW5nKHBlcnNvbmFSZXNwaS5ub21icmUpIDogTk9fQ0FSR0FET19BVU4sXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRpMTogcGFyZW50UmVzcGkgPyBwYXJlbnRSZXNwaSA6IE5PX0NBUkdBRE9fQVVOLFxyXG4gICAgICAgICAgICAgICAgbmplZmU6IGplZmU/Lm5vbWJyZSA/IFN0cmluZyhqZWZlLm5vbWJyZSkgOiBOT19DQVJHQURPX0FVTixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBcclxuICAgIH1cclxuXHJcbiAgICAvLyAzLiBDb21vZGluZXMgaW5kZXBlbmRpZW50ZXMgLyBnbG9iYWxlc1xyXG4gICAgY29uc3QgcmFuZ29GZWNoYSA9IChkZXNkZT86IHN0cmluZyB8IG51bGwsIGhhc3RhPzogc3RyaW5nIHwgbnVsbCkgPT5cclxuICAgICAgICAoZGVzZGUgJiYgaGFzdGEpID8gYCR7ZmVjaGFSZWZlcmVuY2lhKGRlc2RlKX0gYSAke2ZlY2hhUmVmZXJlbmNpYShoYXN0YSl9YCA6IG51bGw7XHJcblxyXG4gICAgY29uc3Qgc2VtUmVmID0gcmFuZ29GZWNoYShzZW1hbmFPYmo/LnNlbWFuYV9yZWZlcmVuY2lhX2Rlc2RlLCBzZW1hbmFPYmo/LnNlbWFuYV9yZWZlcmVuY2lhX2hhc3RhKTtcclxuICAgIGNvbnN0IGQzMFJlZiA9IHJhbmdvRmVjaGEoc2VtYW5hT2JqPy5bJzMwZGlhc19yZWZlcmVuY2lhX2Rlc2RlJ10sIHNlbWFuYU9iaj8uWyczMGRpYXNfcmVmZXJlbmNpYV9oYXN0YSddKTtcclxuXHJcbiAgICAvLyAnY2FudGlfaG9nYXJlcycgc29sbyBzaSBjb25SZWFIb2dhciA9PT0gdHJ1ZSwgZGlyZWN0byBkZSAndG90YWxfaCcgZW4gbGEgcmHDrXpcclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgY29uc3QgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgIGNvbW9kaW5lc0NhbGN1bGFkb3MuY2FudF9ob2dhcmVzID0gdG90YWxIICE9IG51bGwgPyBTdHJpbmcodG90YWxIKSA6IE5PX0NBUkdBRE9fQVVOO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZlY2hhIGRlIHJlYWxpemFjacOzbjogc2UgY29uc3VsdGEgc2llbXByZSBlbiBsYSByYcOteiBkZSBsYSB2aXZpZW5kYVxyXG4gICAgY29uc3QgZlJlYWxpeiA9IHJlc3B1ZXN0YXNSYWl6WydmX3JlYWxpel9vJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIGNvbW9kaW5lc0NhbGN1bGFkb3MuZnJlYWxpeiA9IGZSZWFsaXogIT0gbnVsbCA/IFN0cmluZyhmUmVhbGl6KSA6IE5PX0NBUkdBRE9fQVVOO1xyXG5cclxuICAgIGlmIChzZW1SZWYpIGNvbW9kaW5lc0NhbGN1bGFkb3MuU0VNX1JFRiA9IHNlbVJlZjtcclxuICAgIGlmIChkMzBSZWYpIGNvbW9kaW5lc0NhbGN1bGFkb3MuRDMwX1JFRiA9IGQzMFJlZjtcclxuICAgIGlmIChzZW1hbmFPYmo/Lm1lc19yZWZlcmVuY2lhKSBjb21vZGluZXNDYWxjdWxhZG9zLk1FU19SRUYgPSBtZXNSZWZlcmVuY2lhKHNlbWFuYU9iai5tZXNfcmVmZXJlbmNpYSk7XHJcbiAgICBpZiAoc2VtYW5hTnVtZXJvICE9IG51bGwpIGNvbW9kaW5lc0NhbGN1bGFkb3MuU0VNX05VTSA9IFN0cmluZyhzZW1hbmFOdW1lcm8pO1xyXG5cclxuICAgIGNvbnN0IGNhbWJpbyA9IE9iamVjdC5rZXlzKGNvbW9kaW5lc0NhbGN1bGFkb3MpLnNvbWUoXHJcbiAgICAgICAgKGtleSkgPT4gYWN0dWFsW2tleSBhcyBJZENvbW9kaW5dICE9PSBjb21vZGluZXNDYWxjdWxhZG9zW2tleSBhcyBJZENvbW9kaW5dXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjYW1iaW8pIHtcclxuICAgICAgICBzdG9yZS5kaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0NPTU9ESU5FUyhjb21vZGluZXNDYWxjdWxhZG9zKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnNldENhbGN1bGFyQ29tb2RpbmVzKGNhbGN1bGFyQ29tb2RpbmVzKTtcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOiBzdHJpbmcsIGlkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGNzc1VSTDtcclxuICAgICAgICBsaW5rLmlkID0gaWQgfHwgY3NzVVJMO1xyXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHRyYWUgJHtjc3NVUkx9YCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsaW5rLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICB2YXIgbGlua05vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBsaW5rTm9kZT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGUpO1xyXG59XHJcblxyXG5jb25zdCBCT09UU1RSQVBfNV8xXzNfU1JDID0gJ2Nzcy9ib290c3RyYXAubWluLmNzcyc7XHJcblxyXG4vL0lOSUNJTyBDT05UUk9MIFBFU1RBw5FBUyBBQklFUlRBU1xyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKSB7XHJcbiAgICBpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZCA9IFN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApKSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkvLysnLScrbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBhbGxPcGVuZWRUYWJzW215SWRdID0gMTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQgPSBteUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXYpIHtcclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3NveScpIHtcclxuICAgICAgICAgICAgaWYgKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAndW5sb2FkJykge1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdsb2FkJykge1xyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdID0gMTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdzb3knLCBpZDogbXlJZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMgPSBsaWtlQXIoYWxsT3BlbmVkVGFicykuZmlsdGVyKChfLCBpZCkgPT4gaWQgIT0gbXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ2xvYWQnLCBpZDogbXlJZCB9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHZhciBub3RpZnlVbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICd1bmxvYWQnLCBpZDogbXlJZCB9KTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgbm90aWZ5VW5sb2FkKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG5vdGlmeVVubG9hZClcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcblxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBUyBBQklFUlRBUyJdfQ==
|